Partager via


Utilitaire osql

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

L'utilitaire osql permet de spécifier des instructions Transact-SQL, des procédures système, ainsi que des fichiers de script. Pour communiquer avec le serveur, cet utilitaire fait appel à ODBC.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez de recourir à ce composant dans un nouveau travail de développement et planifiez la modification des applications qui l'utilisent actuellement. Utilisez plutôt sqlcmd . Pour plus d'informations, consultez sqlcmd Utility.

Syntaxe

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 ]
]

Les arguments

-?

Affiche un résumé de la syntaxe des commutateurs osql .

-L

Répertorie tous les serveurs configurés localement et les noms des serveurs émettant sur le réseau.

Notes

osql peut ne pas recevoir de réponse en temps opportun de tous les serveurs d’un réseau Windows. La liste des serveurs retournés peut varier pour chaque appel de cette option.

-U login_id

ID de connexion de l’utilisateur. Les ID de connexion respectent la casse.

-P password

Mot de passe spécifié par l'utilisateur. Si l’option -P n’est pas utilisée, osql demande un mot de passe. Si l’option -P est utilisée à la fin de l’invite de commandes sans mot de passe, osql utilise le mot de passe par défaut (NULL).

Important

N’utilisez pas de mot de passe vide. Utilisez un mot de passe fort. Pour plus d’informations, consultez Mots de passe forts.

Les mots de passe respectent la casse.

La OSQLPASSWORD variable d’environnement vous permet de définir un mot de passe par défaut pour la session active. Par conséquent, vous n’avez pas besoin de coder en dur un mot de passe dans des fichiers batch.

Si vous ne spécifiez pas de mot de passe avec l’option -P , osql vérifie d’abord la OSQLPASSWORD variable. Si aucune valeur n’est définie, osql utilise le mot de passe par défaut. NULL L’exemple suivant définit la OSQLPASSWORD variable à l’invite de commandes, puis accède à l’utilitaire osql :

SET OSQLPASSWORD=abracadabra
osql

Important

Pour masquer votre mot de passe, ne spécifiez pas l'option -P avec l'option -U. Au lieu de cela, après avoir spécifié osql avec l’option -U et d’autres commutateurs (ne spécifiez -Ppas), appuyez sur Entrée et osql vous invite à entrer un mot de passe. Cette méthode garantit le masquage de votre mot de passe lors de son entrée.

-E

Utilise une connexion approuvée au lieu de demander un mot de passe.

-S server_name[\instance_name]

Spécifie l'instance de SQL Server à laquelle établir une connexion. Spécifiez server_name pour vous connecter à l’instance par défaut du SQL Server sur ce serveur. Spécifiez <server_name>\<instance_name> pour se connecter à une instance nommée de SQL Server sur ce serveur. Si aucun serveur n'est spécifié, osql se connecte à l'instance par défaut de SQL Server sur l'ordinateur local. Cette option est indispensable lorsque vous exécutez osql à partir d'un ordinateur distant connecté au réseau.

-H wksta_name

Nom d'une station de travail. Le nom de la station de travail est stocké sysprocesses.hostname et s’affiche par sp_who. Si cette option n’est pas spécifiée, le nom de l’ordinateur actuel est supposé.

-d db_name

Émet une instruction USE db_name quand osql est démarré.

-l time_out

Spécifie le nombre de secondes avant l’expiration d’une connexion osql . Le délai d’expiration par défaut pour la connexion à osql est de huit secondes.

-t délai_d'attente

Spécifie le nombre de secondes avant l’expiration d’une commande. Si aucune valeur de délai d’expiration n’est spécifiée, les commandes n’expirent pas.

-h en-têtes

Spécifie le nombre de lignes à imprimer entre les en-têtes de colonne. Par défaut, les en-têtes ne sont imprimés qu'une fois pour chaque jeu de résultats d'une requête. Permet -1 de spécifier qu’aucun en-tête ne doit être imprimé. Si -1 est utilisé, il ne doit pas y avoir d’espace entre le paramètre et le réglage (-h-1, non -h -1).

-s col_separator

Spécification du caractère de séparation des colonnes, qui est par défaut un espace. Pour utiliser des caractères qui présentent une signification particulière pour le système d'exploitation (par exemple, | ; <>), mettez-les entre guillemets doubles (").

-w largeur_colonne

Permet à l'utilisateur de définir la largeur d'écran des sorties. La valeur par défaut est de 80 caractères. Lorsqu’une ligne de sortie atteint sa largeur d’écran maximale, elle est divisée en plusieurs lignes.

-a packet_size

Spécifie le taille des paquets. Les valeurs correctes pour packet_size sont comprises entre 512 et 65535. La valeur osql par défaut est la valeur par défaut du serveur. L’augmentation de la taille des paquets peut améliorer les performances sur une exécution de script plus importante, où le nombre d’instructions Transact-SQL entre GO les commandes est important. Microsoft indiquent que la valeur 8192 représente généralement le réglage le plus rapide pour les opérations de copie en bloc. Une plus grande taille de paquet peut être demandée, mais osql est défini par défaut sur le serveur si la demande ne peut pas être accordée.

-e

Retourne les données d'entrée.

-I

Définit l’activation de l’option de QUOTED_IDENTIFIER connexion.

-D data_source_name

Établit la connexion à une source de données ODBC définie à l'aide du pilote ODBC de SQL Server. La connexion osql utilise les options spécifiées dans la source de données.

Notes

Cette option ne fonctionne pas avec les sources de données définies pour d’autres pilotes.

-c cmd_end

Spécifie l'indicateur de fin de commande. Par défaut, les commandes sont terminées et envoyées à SQL Server en entrant GO sur une ligne à part. Lorsque vous réinitialisez la marque de fin de commande, n’utilisez pas de mots réservés Transact-SQL ou de caractères qui ont une signification spéciale pour le système d’exploitation, qu’ils soient précédés d’un antislash ou non.

-q « query »

Exécute une requête au démarrage d’osql , mais ne quitte pas osql une fois la requête terminée. (L’instruction de requête ne doit pas inclure GO). Si vous émettez une requête à partir d’un fichier batch, utilisez %<variable>ou environnement %<variable>%. Par exemple :

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

Placez le nom de la requête entre guillemets doubles et tout élément imbriqué dans la requête entre guillemets simples.

-Q" requête "

Exécute une requête, puis quitte immédiatement osql. Placez le nom de la requête entre guillemets doubles et tout élément imbriqué dans la requête entre guillemets simples.

-n

Supprime la numérotation et le symbole de ligne de commande (>) des lignes d'entrée.

-m niveau_d'erreur

Personnalise l'affichage des messages d'erreur. Le numéro du message, son état et son niveau d'erreur sont affichés pour les erreurs atteignant ou dépassant le niveau de gravité indiqué. Aucune information n'est affichée pour les erreurs d'une gravité inférieure au niveau indiqué. Utilisez -1 pour spécifier que tous les en-têtes sont retournés avec les messages, y compris les messages d'information. Si vous utilisez -1, il ne doit pas y avoir d’espace entre le paramètre et le paramètre (-m-1et non -m -1).

-r { 0| 1}

Redirige la sortie du message vers l’écran (stderr). Si vous ne spécifiez pas de paramètre ou si vous spécifiez 0, seuls les messages d’erreur dont le niveau de gravité est 11 ou supérieur sont redirigés. Si vous spécifiez 1, toutes les sorties de message (y compris « impression ») sont redirigées.

-i input_file

Identifie le fichier contenant un traitement d'instructions SQL ou des procédures stockées. L’opérateur de comparaison inférieur à (<) peut être utilisé à la place de -i.

-o output_file

Identifie le fichier recevant une sortie de osql. L’opérateur de comparaison supérieur à (>) peut être utilisé à la place de -o.

Si input_file n’est pas Unicode et -u n’est pas spécifié, output_file est stocké au format OEM. Si input_file est Unicode ou -u est spécifié, output_file est stocké au format Unicode.

-p

Affiche les statistiques sur les performances.

-b

Spécifie que osql se ferme et retourne une valeur DOS ERRORLEVEL lorsqu'une erreur se produit. La valeur retournée à la variable DOS ERRORLEVEL est 1 lorsque le message d’erreur SQL Server a une gravité de 11 ou supérieure ; sinon, la valeur retournée est 0. MS-DOS fichiers batch peuvent tester la valeur de DOS ERRORLEVEL et gérer l’erreur de manière appropriée.

-u

Spécifie qu’ output_file est stocké au format Unicode, quel que soit le format d’ input_file.

-R

Spécifie que le pilote ODBC SQL Server doit utiliser les paramètres client lors de la conversion de données monétaires, de date et d’heure en données caractère.

-O

Spécifie que certaines fonctionnalités d’ osql sont désactivées pour assurer la continuité avec des versions antérieures d’ isql. Les fonctionnalités suivantes sont désactivées :

  • Traitement de lot EOF
  • Mise à l'échelle automatique de la largeur de la console
  • Messages larges

Elle définit également la valeur ERRORLEVELDOS -1 par défaut sur .

Notes

Les options -n, -O, et -D ne sont pas prises en charge par osql.

Notes

L’utilitaire osql doit être exécuté directement à partir du système d’exploitation à l’aide des options respectant la casse énumérées ici. Une fois osql démarré, il accepte les instructions SQL et les envoie de manière interactive à SQL Server. Les résultats sont mis en forme et affichés à l’écran (stdout). Utilisez QUIT ou EXIT pour quitter osql.

Si vous ne spécifiez pas de nom d’utilisateur lorsque vous démarrez osql, SQL Server recherche les variables d’environnement et les utilise, par exemple, osqluser=(<user>) ou osqlserver=(<server>). Si aucune variable d'environnement n'est définie, le nom d'utilisateur du poste de travail est utilisé. Si vous ne spécifiez pas de serveur, le nom de la station de travail est utilisé.

Si ni l'option -U ni l'option -P ne sont utilisées, SQL Server tente de se connecter à l’aide du mode d’authentification Windows. L’authentification est basée sur le compte Windows de l’utilisateur exécutant osql.

L'utilitaire osql utilise l'API ODBC. Cet utilitaire emploie les paramètres par défaut du pilote ODBC SQL Server pour les options de connexion ISO de SQL Server . Pour plus d’informations, consultez Considérations relatives à l’utilisation des instructions SET.

Notes

L’utilitaire osql ne prend pas en charge les types de données définis par l’utilisateur CLR. Pour traiter ces types de données, vous devez employer l'utilitaire sqlcmd . Pour plus d'informations, consultez sqlcmd Utility.

Commandes OSQL

En plus des instructions Transact-SQL dans osql, les commandes ci-dessous sont également disponibles.

Commande Descriptif
GO Exécute toutes les instructions entrées après le dernier GO.
RESET Efface toutes les instructions que vous avez entrées.
QUIT ou EXIT() Quitte osql.
Ctrl+C Termine une requête sans quitter osql.

Notes

!! et ED ne sont pas pris en charge par osql.

Les terminateurs de commande (GOpar défaut), RESET, , EXITQUITet Ctrl+C, sont reconnus uniquement s’ils apparaissent au début d’une ligne, immédiatement après l’invite osql.

GO signale à la fois la fin d'un lot et l'exécution des instructions Transact-SQL mises en cache. Lorsque vous appuyez sur Entrée à la fin de chaque ligne d’entrée, osql met en cache les instructions sur cette ligne. Lorsque vous appuyez sur Entrée après avoir tapé GO, toutes les instructions actuellement mises en cache sont envoyées en tant que lot à SQL Server.

L’utilitaire osql actuel fonctionne comme s’il existe un implicite GO à la fin d’un script exécuté, par conséquent toutes les instructions du script s’exécutent.

Pour terminer une commande, tapez une ligne commençant par un indicateur de fin de commande. Vous pouvez faire suivre cet indicateur de fin de commande d'un nombre entier pour indiquer le nombre d'exécutions de la commande. Par exemple, pour exécuter cette commande 100 fois, entrez :

SELECT x = 1
GO 100

Les résultats sont imprimés une fois à la fin de l'exécution. osql n’accepte pas plus de 1 000 caractères par ligne. Les instructions de grande taille doivent être scindées en plusieurs lignes.

Vous pouvez utiliser les fonctionnalités de rappel de commandes dans Windows pour rappeler et modifier les instructions osql . La mémoire tampon de requête existante peut être effacée en tapant RESET.

Quand osql exécute des procédures stockées, il imprime une ligne vide entre chaque ensemble de résultats dans un lot. En outre, le message « 0 lignes affectées » n’apparaît pas lorsqu’il ne s’applique pas à l’instruction exécutée.

Utiliser osql de manière interactive

Pour utiliser osql en mode interactif, entrez la commande osql (et les options désirées) après l’invite de commandes du système d’exploitation.

Vous pouvez exécuter dans osql la requête contenue dans un fichier (tel que Stores.qry) en entrant une commande de ce type :

osql -E -i stores.qry

Vous pouvez lire un fichier contenant une requête (tel que Titles.qry) et rediriger les résultats vers un autre fichier en entrant une commande de ce type :

osql -E -i titles.qry -o titles.res

Important

Si possible, utilisez l’option -E (connexion approuvée).

Lorsque vous utilisez osql de manière interactive, vous pouvez lire un fichier de système d’exploitation dans la mémoire tampon de commande avec :r<file_name>. Cette opération adresse le script SQL qui se trouve dans nom_fichier directement au serveur en un seul traitement.

Notes

osql traite le séparateur GO de lots comme une erreur de syntaxe, s’il apparaît dans un fichier de script SQL.

Insérer des commentaires

Vous pouvez inclure des commentaires dans une instruction Transact-SQL soumise à SQL Server par osql. Deux styles de commentaires sont autorisés : -- et /*...*/.

Utiliser la sortie pour retourner des résultats dans osql

Vous pouvez utiliser le résultat d’une SELECT instruction comme valeur de retour d’osql. S’il est numérique, la dernière colonne de la dernière ligne de résultat est convertie en entier de 4 octets (long). MS-DOS transmet l'octet de poids faible au processus parent ou au niveau erreur du système d'exploitation. Windows transmet la totalité de l'entier de 4 octets. La syntaxe est :

EXIT ( <query> )

Par exemple :

EXIT(SELECT @@ROWCOUNT)

Vous pouvez également inclure le paramètre EXIT dans un fichier de commandes. Par exemple :

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

L’utilitaire osql transmet tout ce qui se trouve entre les parenthèses () au serveur exactement tel qu'entré. Si une procédure système stockée sélectionne un ensemble et retourne une valeur, seule la sélection est retournée. L’instruction EXIT() sans parenthèses exécute tout ce qui précède dans le lot, puis se termine sans valeur de retour.

Il existe quatre EXIT formats :

Format Détails
EXIT N’exécute pas le batch ; quitte immédiatement et ne retourne aucune valeur.
EXIT() Exécute le traitement, puis quitte sans retourner de valeur.
EXIT(<query>) Exécute le traitement, y compris la requête, puis quitte en retournant les résultats de la requête.
RAISERROR avec un état de 127 Si RAISERROR est utilisé dans un script osql et qu’un état de 127 est déclenché, osql quitte et retourne l’ID de message au client.

L’exemple suivant montre comment affecter le comportement osql avec RAISERROR:

RAISERROR (50001, 10, 127);

Cette erreur entraîne la fin du script osql et retourne l’ID de message 50001 au client.

Les valeurs de retour entre -1 et -99 sont réservées. osql définit les valeurs suivantes :

  • -100: Erreur rencontrée avant de sélectionner la valeur de retour.
  • -101: Aucune ligne trouvée lors de la sélection de la valeur de retour.
  • -102: erreur de conversion s’est produite lors de la sélection de la valeur de retour.

Afficher les types de données money et smallmoney

osql affiche les types de données money et smallmoney avec deux décimales, bien que SQL Server les stocke en interne avec quatre décimales. Prenons cet exemple :

SELECT CAST (CAST (10.3496 AS MONEY) AS DECIMAL (6, 4));
GO

Cette instruction produit le résultat 10.3496, ce qui indique que la valeur est bien stockée avec toutes ses décimales.