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.
Importante |
---|
Questa caratteristica 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 che attualmente utilizzano questa caratteristica. In alternativa, utilizzare 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 la distinzione tra maiuscole e minuscole è rilevante.-Ppassword
Password specificata dall'utente. Se si omette questa 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 sicurezza 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 sicurezza 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 venga nascosta durante l'immissione.
-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 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 sulla rete.-Hwksta_name
Nome della workstation. Tale nome viene archiviato in sysprocesses.hostname e visualizzato tramite sp_who. Se questa opzione non è specificata, 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 una volta 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 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 dati ODBC definita mediante il driver ODBC per SQL Server. La connessione osql utilizza le opzioni specificate nell'origine dati.Nota
Tale opzione non può essere utilizzata con origini 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. Il valore restituito alla variabile DOS ERRORLEVEL è 1 se il messaggio di errore di SQL Server ha un livello di gravità pari a 11 o superiore. In caso contrario il valore restituito è 0. Microsoft Nei file batch MS-DOS è possibile eseguire il test del valore di DOS ERRORLEVEL e gestire l'errore in modo adeguato.-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
Specifica che determinate caratteristiche di osql devono essere disattivate ai fini della corrispondenza con il funzionamento delle precedenti versioni di isql. Vengono disattivate le caratteristiche 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, in SQL Server viene eseguita la verifica delle variabili di ambiente e vengono utilizzati 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. L'autenticazione si basa sull'account di Microsoft Windows dell'utente che esegue osql.
Nell'utilità osql viene utilizzata l'API ODBC. 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 del comando 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 sicurezza |
---|
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 considerato 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. Se numerica, l'ultima colonna dell'ultima 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 posizioni 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.
Vedere anche