Utilità osql
L'utilità osql consente di immettere istruzioni Transact-SQL, stored procedure di sistema e file script. Questa utilità comunica con il server tramite ODBC.
Importante: |
---|
Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft 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 tramite broadcast, è possibile che sqlcmd 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.
-P password
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 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 protezione: Per nascondere la password, non specificare l'opzione -P in combinazione con l'opzione -U. Dopo aver 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.
- -S server_name[ **\instance_name]
Specifica l'istanza di Microsoft SQL Server alla quale connettersi. Per connettersi all'istanza predefinita di SQL Server in un determinato server, 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 in rete.
- -H wksta_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.
- -d db_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 è 8 secondi.
- -t time_out
Specifica il numero di secondi prima del timeout del comando. Se per time_out non viene specificato un valore, i comandi non sono associati ad alcun timeout.
- -h headers
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).
- -s col_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 (").
- -w column_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 65.535. 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 di massa, 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 la connessione a un'origine dei dati ODBC definita utilizzando il driver ODBC per Microsoft 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.
- -c cmd_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. 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 la 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.
- -m error_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").
- -i input_file
Identifica il file che include un batch di istruzioni SQL o stored procedure. Anziché -i, è possibile utilizzare l'operatore di confronto minore di (<).
-o output_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 -u viene omesso, output_file viene archiviato in formato OEM. Se input_file è un file Unicode e si specifica -u, 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
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 di maiuscole e minuscole è rilevante. Dopo l'avvio, osql accetta istruzioni SQL e le invia in modo interattivo a SQL Server. I risultati vengono formattati e visualizzati sullo schermo (stdout). Per uscire da osql utilizzare QUIT o EXIT.
Se all'avvio di osql non viene specificato il nome utente, SQL Server verifica le variabili d'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.
L'utilità osql utilizza le API ODBC. L'utilità utilizza le impostazioni predefinite del driver ODBC per SQL Server per le opzioni di connessione SQL-92 di SQL Server. Per ulteriori informazioni, vedere Effects of SQL-92 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 l'utilità 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 comandi !! 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 vi fosse un comando GO implicito, pertanto esegue 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 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 funzioni 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 simile 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 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 tramite :rfile_name. In questo caso, lo script SQL in file_name viene inviato direttamente al server come batch singolo.
[!NOTA] In caso di utilizzo di osql, SQL Server considera un errore di sintassi la presenza del separatore batch "GO" in un file script SQL.
Inserimento di commenti
L'utilità osql consente di inserire commenti in un'istruzione Transact-SQL da inoltrare 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 con 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 si verifica una condizione con stato 127, l'utilità osql viene chiusa e restituisce al client l'ID di messaggio. Ad esempio:
RAISERROR(50001, 10, 127)
Con questo errore l'esecuzione dello script osql viene interrotta e al client viene restituito l'ID di messaggio 50001.
I valori restituiti compresi tra -1 e -99 sono riservati a SQL Server. L'utilità osql utilizza 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 SQL Server archivi il valore internamente con quattro cifre decimali. Si consideri l'esempio seguente:
SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
GO
Questa istruzione produce il risultato 10,3496, che indica che il valore viene archiviato con tutte le cifre decimali.
Vedere anche
Altre risorse
/*...*/ (commento) (MDX)
-- (commento) (MDX)
CAST e CONVERT (Transact-SQL)
Protezione di Notification Services
RAISERROR (Transact-SQL)