Utilitaire osql

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 d'utiliser cette fonction dans un nouveau travail de développement et prévoyez la modification des applications qui l'utilisent actuellement. Utilisez sqlcmd à la place. Pour plus d'informations, consultez Utilitaire sqlcmd.

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

Arguments

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

  • -L
    Répertorie tous les serveurs configurés localement et le nom des serveurs émettant sur le réseau.

    [!REMARQUE]

    En raison de la nature de la diffusion sur les réseaux, osql risque de ne pas recevoir de réponse de tous les serveurs dans les délais impartis. Par conséquent, la liste des serveurs retournée peut varier à chaque invocation de cette option.

  • -Ulogin_id
    ID de connexion de l'utilisateur. Les ID de connexion respectent la casse.

  • -Ppassword
    Spécifie le mot de passe pour l'utilisateur. Si l'option -P est omise, osql demande d'entrer un mot de passe. Si vous utilisez l'option -P à la fin de la ligne de commande sans spécifier de mot de passe, osql emploie le mot de passe par défaut (NULL).

    Remarque relative à la sécuritéRemarque relative à la sécurité

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

    Les mots de passe respectent la casse.

    La variable d'environnement OSQLPASSWORD permet de définir un mot de passe par défaut pour la session en cours. Par conséquent, il est inutile de programmer spécifiquement le mot de passe dans des fichiers de commandes.

    Si vous ne spécifiez pas de mot de passe avec l'option -P, osql commence par rechercher la variable OSQLPASSWORD. Si aucune valeur n'est définie, osql utilise le mot de passe par défaut (NULL). L'exemple suivant définit la variable OSQLPASSWORD dans une invite de commandes et accède ensuite à l'utilitaire osql :

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>osql 
    
    Remarque relative à la sécuritéRemarque relative à la sécurité

    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 pas -P), appuyez sur Entrée et osql vous invitera à 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.

  • -Sserver_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 vous connecter à une instance nommée du SQL Server sur ce serveur. Si aucun serveur n'est spécifié, osql se connecte à l'instance par défaut du SQL Server sur l'ordinateur local. Cette option est indispensable lorsque vous exécutez osql à partir d'un ordinateur distant connecté au réseau.

  • -Hwksta_name
    Spécifie le nom d'un poste de travail. Le nom de la station de travail est stocké dans sysprocesses.hostname et est affiché par sp_who. Si cette option n'est pas spécifiée, le nom d'ordinateur en cours est utilisé par défaut.

  • -ddb_name
    Émet une instruction USE db_name db_name au démarrage de osql.

  • - ltime_out
    Spécifie le nombre de secondes avant expiration du délai de connexion à osql. Le délai d'attente par défaut pour la connexion à osql est de huit secondes.

  • -ttime_out
    Spécifie le nombre de secondes accordées pour l'exécution d'une commande. Si aucune valeur time_out n'est spécifiée, les commandes n’ont pas de délai d'expiration.

  • -hheaders
    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. Utilisez -1 pour indiquer qu'aucun titre ne sera imprimé. Si vous utilisez –1, aucun espace ne doit exister entre le paramètre et sa valeur (-h-1 et pas -h -1).

  • -scol_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 (").

  • -wcolumn_width
    Permet à l'utilisateur de définir la largeur d'écran des sorties. La largeur par défaut est de 80 caractères. Lorsqu'une ligne de sortie a atteint la largeur d'écran maximale, elle est scindée en plusieurs lignes.

  • -apacket_size
    Spécifie le taille des paquets. Les valeurs correctes pour packet_size sont comprises entre 512 et 65535. La valeur par défaut utilisée par osql est celle qui est utilisée par défaut par le serveur. Une plus grande taille de paquet permet d'améliorer les performances lors de l'exécution de scripts plus volumineux, où la quantité d'instructions SQL entre les commandes GO et substantielle. Les tests 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 taille de paquet supérieure peut être demandée, mais osql prend la valeur par défaut du serveur si la demande ne peut pas être satisfaite.

  • -e
    Retourne les données d'entrée.

  • -I
    Active l'option de connexion QUOTED_IDENTIFIER.

  • [-Ddata_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.

    [!REMARQUE]

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

  • -ccmd_end
    Spécifie l'indicateur de fin de commande. Par défaut, il faut entrer la commande GO sur une ligne isolée pour terminer une commande et la soumettre à SQL Server. Si vous changez d'indicateur de fin de commande, n'utilisez ni les mots réservés Transact-SQL ni les caractères ayant une signification particulière pour le système d'exploitation, qu'ils soient ou non précédés d'une barre oblique inverse

  • -q "query"
    Exécute une requête au démarrage de osql, mais ne quitte pas osql à l'issue de la requête. (Notez que la requête ne doit pas comporter d'instruction GO). Si vous exécutez une requête à partir d'un fichier de commandes, vous pouvez utiliser %variable ou %variable d'environnement%. 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"query"
    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.

  • -merror_level
    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 afficher tous les en-têtes retournés avec les messages, même s'il s'agit de messages d'information. Si vous utilisez -1, ne laissez aucun espace entre le paramètre et sa valeur (-m-1, et non -m -1).

  • -r { 0| 1}
    Redirige la sortie des messages à l'écran (stderr). Si vous n'indiquez aucun paramètre ou si vous spécifiez la valeur 0, seuls les messages d'erreur de gravité égale ou supérieure à 11 sont redirigés. Si vous indiquez la valeur 1, tous les messages émis (y compris les messages d'impression) sont redirigés.

  • -iinput_file
    Identifie le fichier contenant un traitement d'instructions SQL ou de procédures stockées. Le symbole inférieur à (<) peut être utilisé à la place de -i.

  • -ooutput_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 au format Unicode et si -u n'est pas spécifié, output_file est enregistré au format OEM. Si input_file est au format Unicode ou si -u est spécifié, le fichier output_file sera stocké au format Unicode.

  • -p
    Affiche les statistiques sur les performances.

  • -b
    Spécifie que osql prend fin 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 de SQL Server possède une gravité égale ou supérieure à 11, sinon la valeur retournée est 0. Les fichiers de commande Microsoft MS-DOS peuvent tester la valeur de DOS ERRORLEVEL et traiter l'erreur d'une manière appropriée.

  • -u
    Spécifie que output_file est stocké au format Unicode, quel que soit le format de input_file.

  • -R
    Spécifie l'utilisation par le pilote ODBC de SQL Server des paramètres du client pour convertir monnaie, date et heure en données caractères.

  • -O
    Spécifie que certaines fonctions de osql sont désactivées pour assurer la continuité avec des versions antérieures de 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

    Il attribue aussi la valeur par défaut -1 à DOS ERRORLEVEL.

[!REMARQUE]

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

Notes

L'utilitaire osql doit être directement exécuté à partir du système d'exploitation en utilisant les options énumérées ici et qui respectent la casse. Une fois démarré, osql accepte les instructions SQL et les envoie de façon interactive à SQL Server. Les résultats sont mis en forme et affichés à l'écran (stdout). Pour quitter osql, utilisez QUIT ou EXIT.

Si vous ne spécifiez pas de nom d'utilisateur lorsque vous démarrez osql, SQL Server vérifie 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 n'indiquez pas de serveur, le nom du poste de travail est utilisé.

Si ni l'option -U, ni l'option -P n'est employée, SQL Server tente la connexion en utilisant le mode d'authentification Microsoft Windows. L'authentification est basée sur le compte Microsoft 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 « Effets des options ANSI ».

[!REMARQUE]

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

Commandes OSQL

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

Commande

Description

GO

Exécute toutes les commandes 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.

[!REMARQUE]

Les commandes !! et ED ne sont plus prises en charge par osql.

Les indicateurs de fin de commande, GO (par défaut), RESET EXIT, QUIT et CTRL+C ne sont reconnus que s'ils apparaissent au début d'une ligne, juste après l'invite osql.

GO indique la fin d'un traitement et l'exécution des commandes Transact-SQL placées dans le cache. Quand vous appuyez sur ENTRÉE à la fin d'une ligne d'entrée, osql place les instructions de cette ligne dans le cache. Lorsque vous appuyez sur ENTRÉE après avoir tapé GO, toutes les instructions en cache sont envoyées en tant que traitement à SQL Server.

L'utilitaire osql actuel fonctionne comme si une instruction GO implicite terminait chaque script exécuté, de sorte que toutes les instructions du script sont exécutées.

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.

La fonction de rappel de commande de Windows NT peut servir à rappeler et à modifier des instructions osql. Le tampon de requête en cours peut être vidé en tapant RESET.

Lors de l'exécution de procédures stockées, osql imprime une ligne vide entre chaque jeu de résultats d'un traitement. En outre, le message « 0 ligne affectée » ne s'affiche pas lorsqu'il ne concerne pas l'instruction exécutée.

Utilisation interactive de osql

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
Remarque relative à la sécuritéRemarque relative à la sécurité

Lorsque cela est possible, utilisez l'option -E (connexion approuvée).

Lorsque vous utilisez osql en mode interactif, vous pouvez consulter un fichier du système d'exploitation dans la mémoire tampon de commande en entrant :rfile_name. Cela adresse le script SQL qui se trouve dans file_name directement au serveur en un seul traitement.

[!REMARQUE]

Quand osql est utilisé, SQL Server traite le séparateur de traitements « GO », s'il apparaît dans un fichier de script SQL, comme une erreur de syntaxe.

Insertion de commentaires

Vous pouvez inclure des commentaires dans une instruction Transact-SQL soumise à SQL Server par osql. Il existe deux syntaxes de commentaires : -- et /*...*/.

Pour plus d'informations, consultez Utilisation de commentaires.

Utilisation d'EXIT pour retourner des résultats dans osql

Vous pouvez utiliser le résultat d'une instruction SELECT comme valeur retournée par osql. La première colonne de la première ligne de résultats est convertie en un entier de 4 octets (entier 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 de cette commande est la suivante :

EXIT ( < query > )

Par exemple :

EXIT(SELECT @@ROWCOUNT)

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

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

L'utilitaire osql transmet au serveur toutes les informations placées entre parenthèses ( ) telles qu'elles ont été entrées. 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 information entre parenthèses exécute toutes les commandes qui la précèdent dans le traitement, puis quitte l'utilitaire sans retourner de valeur.

Il existe quatre formats de sortie :

  • EXIT

[!REMARQUE]

N'exécute pas le traitement ; ferme immédiatement l'utilitaire et ne retourne aucune valeur.

  • EXIT**(** )

[!REMARQUE]

Exécute le traitement, puis quitte sans retourner de valeur.

  • EXIT**(query)**

[!REMARQUE]

Exécute le traitement, y compris la requête, puis quitte en retournant les résultats de la requête.

  • RAISERROR avec une gravité de 127

[!REMARQUE]

Si RAISERROR est utilisé dans un script osql et qu'une erreur de gravité 127 se produit, l'exécution de osql se termine et l'ID du message est retourné au client. Par exemple :

RAISERROR(50001, 10, 127)

Cette erreur entraîne l'arrêt de l'exécution du script osql et envoie le message 50001 au client.

Les valeurs retournées comprises entre -1 et -99 sont réservées à SQL Server. osql définit les valeurs suivantes :

  • -100

    Erreur rencontrée avant la sélection d'une valeur retournée.

  • -101

    Aucune ligne trouvée lors de la sélection d'une valeur retournée.

  • -102

    Erreur de conversion survenue lors de la sélection d'une valeur retournée.

Affichage des 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.