Utilità osql

L'utilità osql consente di immettere istruzioni Transact-SQL, procedure di sistema e file script. Questa utilità comunica con il server tramite ODBC.

Nota importanteImportante

Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare pertanto di utilizzarla in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui questa funzionalità è stata implementata. Utilizzare invece sqlcmd. Per ulteriori informazioni, vedere Utilità sqlcmd.

Sintassi

osql
[-?] |
[-L] |
[
  {
     {-Ulogin_id [-Ppassword]} | –E }
     [-Sserver_name[\instance_name]] [-Hwksta_name] [-ddb_name]
     [-ltime_out] [-ttime_out] [-hheaders]
     [-scol_separator] [-wcolumn_width] [-apacket_size]
     [-e] [-I] [-D data_source_name]
     [-ccmd_end] [-q "query"] [-Q"query"]
     [-n] [-merror_level] [-r {0 | 1}]
     [-iinput_file] [-ooutput_file] [-p]
     [-b] [-u] [-R] [-O]
]

Argomenti

  • -?
    Visualizza il riepilogo della sintassi delle opzioni di osql.

  • -L
    Elenca i server configurati localmente e i nomi dei server che trasmettono in rete tramite broadcast.

    [!NOTA]

    A causa della natura delle trasmissioni in rete, è possibile che osql non riceva una risposta tempestiva da tutti i server e pertanto che l'elenco di server restituito sia diverso per ogni chiamata di questa opzione.

  • -Ulogin_id
    ID di accesso dell'utente. Per gli ID di accesso viene fatta distinzione tra maiuscole e minuscole.

  • -Ppassword
    Password specificata dall'utente. Se si omette l'opzione -P, osql richiede una password. Se l'opzione -P viene specificata alla fine del prompt dei comandi senza indicare una password, osql utilizza la password predefinita (NULL).

    Nota sulla protezioneNota sulla protezione

    Non utilizzare una password vuota. Utilizzare una password complessa. Per ulteriori informazioni, vedere Password complesse.

    Per le password viene fatta distinzione tra maiuscole e minuscole.

    La variabile di ambiente OSQLPASSWORD consente di impostare una password predefinita per la sessione corrente. Non è pertanto necessario specificare una password a livello di codice nei file batch.

    Se si specifica l'opzione -P e si omette la password, osql verifica innanzitutto la variabile OSQLPASSWORD. Se non viene impostato alcun valore, osql utilizza la password predefinita NULL. Nell'esempio seguente viene impostata la variabile OSQLPASSWORD al prompt dei comandi e quindi si accede all'utilità osql.

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>osql 
    
    Nota sulla protezioneNota sulla protezione

    Per nascondere la password, non specificare l'opzione -P in combinazione con l'opzione -U. Dopo avere specificato osql con l'opzione -U e le altre opzioni (non specificare -P), premere invece INVIO. A questo punto osql richiederà una password. Questo metodo garantisce che la password sarà nascosta durante il suo inserimento.

  • -E
    Utilizza una connessione trusted anziché richiedere una password.

  • -Sserver_name[ **\instance_name]
    Specifica l'istanza di SQL Server alla quale connettersi. Per connettersi all'istanza predefinita di SQL Server in un server specifico, specificare server_name . Per connettersi all'istanza denominata di SQL Server in un determinato server, specificare server_name
    \**instance_name. Se non si specifica alcun server, osql si connette all'istanza predefinita di SQL Server nel computer locale. Questa opzione è obbligatoria per l'esecuzione di osql da un computer remoto sulla rete.

  • -Hwksta_name
    Nome della workstation. Tale nome viene archiviato in sysprocesses.hostname e utilizzando la stored procedure sp_who. Se omesso, viene utilizzato il nome del computer corrente.

  • -ddb_name
    Esegue un'istruzione USE db_name all'avvio di osql.

  • - ltime_out
    Specifica il numero di secondi prima del timeout di accesso a osql. Il valore predefinito per il timeout di accesso a osql è otto secondi.

  • -ttime_out
    Specifica il numero di secondi prima del timeout del comando. Se per time_out non viene specificato alcun valore, ai comandi non viene associato alcun timeout.

  • -hheaders
    Specifica il numero di righe da stampare tra le intestazioni delle colonne. L'impostazione predefinita prevede la stampa delle intestazioni per ogni set di risultati delle query. Utilizzare -1 per non stampare alcuna intestazione. Se si utilizza –1, non inserire spazi tra il parametro e l'impostazione (-h-1 e non -h -1).

  • -scol_separator
    Specifica il carattere separatore di colonne che, per impostazione predefinita, è uno spazio vuoto. Per utilizzare caratteri con un significato speciale per il sistema operativo (ad esempio, | ; & < >), racchiudere il carattere tra virgolette doppie (").

  • -wcolumn_width
    Consente di impostare la larghezza della schermata per l'output. Il valore predefinito è 80 caratteri. Se una riga di output raggiunge la larghezza massima della schermata, viene suddivisa su più righe.

  • -apacket_size
    Consente di richiedere un pacchetto di dimensioni diverse. I valori validi per packet_size sono compresi tra 512 e 65535. Il valore predefinito per osql è il valore predefinito del server. Aumentando le dimensioni del pacchetto si possono ottenere miglioramenti delle prestazioni di esecuzione di script di grandi dimensioni, che includono numerose istruzioni SQL tra i comandi GO. Le verifiche condotte da Microsoft indicano che, per le operazioni di copia bulk, l'impostazione che garantisce le prestazioni più veloci è in genere 8.192. È possibile richiedere una dimensione maggiore del pacchetto, ma se questa non è disponibile osql utilizza il valore predefinito del server.

  • -e
    Esegue l'eco dell'input.

  • -I
    Attiva l'opzione di connessione QUOTED_IDENTIFIER.

  • -Ddata_source_name
    Stabilisce una connessione a un'origine dei dati ODBC definita mediante il driver ODBC per SQL Server. La connessione osql utilizza le opzioni specificate nell'origine dei dati.

    [!NOTA]

    Tale opzione non può essere utilizzata con origini dei dati definite per altri driver.

  • -ccmd_end
    Specifica il carattere di terminazione del comando. Per impostazione predefinita, i comandi vengono terminati e inviati a SQL Server tramite l'immissione di GO su una riga a sé stante. Se si reimposta il carattere di terminazione del comando, non utilizzare parole riservate di Transact-SQL o caratteri con un significato speciale per il sistema operativo, indipendentemente dal fatto che siano preceduti da una barra rovesciata.

  • -q "query"
    Esegue una query all'avvio di osql senza uscire da osql al termine della query. Si noti che l'istruzione della query non dovrebbe includere l'istruzione GO. Se si esegue una query da un file batch, è possibile utilizzare variabili in formato %variabile o variabili di ambiente in formato %variabile%. Ad esempio:

    SET table=sys.objects
    osql -E -q "select name, object_id from %table%"
    

    Racchiudere la query tra virgolette doppie e utilizzare le virgolette singole per altri elementi inclusi nella query.

  • -Q"query"
    Esegue una query ed esce immediatamente da osql. Racchiudere la query tra virgolette doppie e utilizzare le virgolette singole per altri elementi inclusi nella query.

  • -n
    Rimuove la numerazione e il simbolo del prompt (>) dalle righe di input.

  • -merror_level
    Personalizza la visualizzazione dei messaggi di errore. Per gli errori con livello di gravità pari o superiore a quello specificato vengono visualizzati il numero, lo stato e il livello di errore del messaggio. Per gli errori con livelli di gravità inferiori a quello specificato non viene visualizzato nulla. Utilizzare -1 per specificare che con i messaggi, anche quelli informativi, devono essere restituite anche tutte le rispettive intestazioni. Se si utilizza -1, non inserire spazi tra il parametro e l'impostazione (-m-1 e non -m -1).

  • -r { 0| 1}
    Reindirizza l'output dei messaggi sullo schermo (stderr). Se il parametro viene omesso o si specifica 0, vengono reindirizzati solo i messaggi di errore con gravità pari o superiore a 11. Se si specifica 1, viene reindirizzato l'output di tutti i messaggi (incluso quello dell'istruzione "print").

  • -iinput_file
    Identifica il file che include un batch di istruzioni SQL o stored procedure. Anziché -i, è possibile utilizzare l'operatore di confronto minore di (<).

  • -ooutput_file
    Identifica il file che riceve l'output di osql. Anziché -o, è possibile utilizzare l'operatore di confronto maggiore di (>).

    Se input_file non è un file Unicode e l'opzione -u non è specificata, output_file viene archiviato in formato OEM. Se input_file è un file Unicode o l'opzione -u è specificata, output_file viene archiviato in formato Unicode.

  • -p
    Stampa le statistiche sulle prestazioni.

  • -b
    Specifica che, in caso di errore, osql termini restituendo un valore DOS ERRORLEVEL. Quando la gravità del messaggio di errore di SQL Server è uguale o maggiore di 11, il valore restituito alla variabile DOS ERRORLEVEL è 1. In caso contrario, il valore restituito è 0. Nei file batch di Microsoft MS-DOS è possibile verificare il valore di DOS ERRORLEVEL e gestirlo in modo appropriato.

  • -u
    Specifica che output_file viene archiviato in formato Unicode, indipendentemente dal formato di input_file.

  • -R
    Specifica che il driver ODBC di SQL Server utilizza le impostazioni del client per convertire i dati relativi a valuta, data e ora in dati di tipo carattere.

  • -O
    Disattiva determinate funzionalità di osql in modo che il funzionamento dell'utilità corrisponda a quello delle precedenti versioni di isql. Vengono disattivate le funzionalità seguenti:

    • Elaborazione batch EOF

    • Adattamento automatico della larghezza della console

    • Messaggi estesi

    L'opzione imposta inoltre il valore predefinito di DOS ERRORLEVEL su -1.

[!NOTA]

Le opzioni -n, -O e -D non sono più supportate da osql.

Osservazioni

L'utilità osql viene avviata direttamente dal sistema operativo con le opzioni elencate di seguito per le quali la distinzione tra maiuscole e minuscole è rilevante. Dopo l'avvio, osql accetta istruzioni SQL e le invia a SQL Server in modo interattivo. I risultati vengono formattati e visualizzati sullo schermo (stdout). Per uscire da osql utilizzare QUIT o EXIT.

Se all'avvio di osql non si specifica un nome utente, SQL Server verifica le variabili di ambiente e utilizza tali valori, ad esempio osqluser=(user) o osqlserver=(server). Se non sono state impostate variabili di ambiente, viene utilizzato il nome utente della workstation. Se non si specifica un server, viene utilizzato il nome della workstation.

Se non si specifica l'opzione -U né l'opzione -P, SQL Server cerca di stabilire la connessione utilizzando la modalità di autenticazione di Microsoft Windows. L'autenticazione si basa sull'account di Microsoft Windows dell'utente che esegue osql.

In osql vengono utilizzate l'API ODBC e le impostazioni predefinite del driver ODBC di SQL Server per le opzioni di connessione ISO di SQL Server. Per ulteriori informazioni, vedere Effects of ANSI Options (informazioni in lingua inglese).

[!NOTA]

L'utilità osql non supporta i tipi di dati CLR definiti dall'utente. Per elaborare questi tipi di dati, è necessario utilizzare sqlcmd. Per ulteriori informazioni, vedere Utilità sqlcmd.

Comandi OSQL

Oltre alle istruzioni Transact-SQL all'interno di osql, sono disponibili anche i comandi seguenti.

Comando

Descrizione

GO

Esegue tutte le istruzioni immesse dopo l'ultimo comando GO.

RESET

Cancella tutte le istruzioni immesse.

QUIT o EXIT( )

Consente di uscire da osql.

CTRL+C

Termina una query senza uscire da osql.

[!NOTA]

I caratteri !! e ED non sono più supportati da osql.

I caratteri di terminazione dei comandi GO (predefinito), RESET EXIT, QUIT e CTRL+C vengono riconosciuti solo se vengono specificati all'inizio della riga, subito dopo il prompt osql.

GO indica sia la fine di un batch che l'esecuzione di eventuali istruzioni Transact-SQL memorizzate nella cache. Quando si preme INVIO alla fine di ogni riga di input, osql memorizza nella cache le istruzioni della riga. Quando si preme INVIO dopo aver digitato GO, tutte le istruzioni memorizzate nella cache vengono inviate in batch a SQL Server.

La versione corrente dell'utilità osql funziona come se alla fine di tutti gli script eseguiti fosse presente un comando GO implicito. Di conseguenza vengono eseguite tutte le istruzioni dello script.

Terminare un comando digitando una riga che inizia con un carattere di terminazione del comando. Per specificare quante volte eseguire il comando, digitare un numero dopo il carattere di terminazione. Ad esempio, per eseguire il comando seguente 100 volte, digitare:

SELECT x = 1
GO 100

I risultati vengono stampati solo una volta al termine dell'esecuzione. osql non accetta più di 1.000 caratteri per riga. Le istruzioni di grandi dimensioni devono essere suddivise su più righe.

Le funzionalità per la chiamata di comandi di Windows consentono di richiamare e modificare le istruzioni osql. Per cancellare il buffer di query esistente digitare RESET.

Durante l'esecuzione di stored procedure osql stampa una riga vuota dopo ogni set di risultati di un batch. Inoltre, il messaggio "Righe interessate: 0" non viene visualizzato se non è riferibile all'istruzione eseguita.

Uso interattivo di osql

Per utilizzare osql interattivamente, al prompt dei comandi digitare il comando osql e le opzioni desiderate.

Per leggere un file contenente una query, ad esempio Stores.qry, da eseguire con osql, digitare un comando analogo al seguente:

osql -E -i stores.qry

Per leggere un file contenente una query, ad esempio Titles.qry, e indirizzare i risultati a un altro file, digitare un comando simile al seguente:

osql -E -i titles.qry -o titles.res
Nota sulla protezioneNota sulla protezione

Se possibile, utilizzare l'opzione -E (connessione trusted).

Quando si utilizza osql interattivamente, è possibile leggere un file del sistema operativo nel buffer dei comandi mediante :rfile_name. In questo modo lo script SQL in file_name viene inviato direttamente al server come batch singolo.

[!NOTA]

Quando si utilizza osql, in SQL Server la presenza del separatore di batch GO in un file script SQL viene considerata un errore di sintassi.

Inserimento di commenti

L'utilità osql consente di inserire commenti in un'istruzione Transact-SQL inviata a SQL Server. Sono supportati due tipi di indicatori di commento: -- and /*...*/.

Per ulteriori informazioni, vedere Utilizzo dei commenti.

Utilizzo di EXIT per la restituzione dei risultati in osql

Il risultato di un'istruzione SELECT può essere utilizzato come valore restituito da osql. La prima colonna della prima riga di risultati viene convertita in un valore integer di 4 byte (long). MS-DOS passa il byte di ordine inferiore al processo padre o al livello di errore del sistema operativo. Windows passa l'intero valore integer di 4 byte. La sintassi è:

EXIT ( < query > )

Ad esempio:

EXIT(SELECT @@ROWCOUNT)

È inoltre possibile includere il parametro EXIT in un file batch. Ad esempio:

osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"

L'utilità osql passa al server tutti gli elementi racchiusi tra parentesi ( ) senza modificarli. Se una stored procedure di sistema seleziona un set e restituisce un valore, viene restituita solo la selezione. Se non si specifica alcun elemento tra le parentesi dell'istruzione EXIT**()**, viene eseguito tutto ciò che la precede nel batch e l'operazione viene quindi terminata senza restituire alcun valore.

L'istruzione EXIT può avere quattro formati:

  • EXIT

[!NOTA]

L'utilità non esegue il batch, viene chiusa immediatamente e non restituisce alcun valore.

  • EXIT**(** )

[!NOTA]

L'utilità esegue il batch, viene chiusa e non restituisce alcun valore.

  • EXIT**(query)**

[!NOTA]

L'utilità esegue il batch, inclusa la query, quindi viene chiusa dopo aver restituito i risultati della query.

  • RAISERROR con stato 127.

[!NOTA]

Se in uno script osql si utilizza RAISERROR e viene generato un errore con stato 127, l'utilità osql viene chiusa e al client viene restituito l'ID di messaggio. Ad esempio:

RAISERROR(50001, 10, 127)

Questo errore provoca l'interruzione dello script osql e la restituzione dell'ID di messaggio 50001 al client.

I valori restituiti compresi tra -1 e -99 sono riservati a SQL Server. In osql vengono utilizzati i valori seguenti:

  • -100

    Si è verificato un errore prima di selezionare il valore restituito.

  • -101

    Selezionando il valore restituito non si sono trovate righe.

  • -102

    Si è verificato un errore di conversione durante la selezione del valore restituito.

Visualizzazione dei tipi di dati money e smallmoney

osql visualizza i tipi di dati money e smallmoney con due cifre decimali sebbene in SQL Server il valore venga archiviato internamente con quattro cifre decimali. Si consideri l'esempio seguente:

SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
GO

Questa istruzione restituisce il risultato 10.3496, che indica che il valore viene archiviato con tutte le cifre decimali.