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.

ms162806.note(fr-fr,SQL.90).gifImportant :
Cette fonctionnalité sera retirée dans une future version de Microsoft 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 options de osql.
  • -L
    Répertorie tous les serveurs configurés localement et le nom des serveurs émettant sur le réseau.

    ms162806.note(fr-fr,SQL.90).gifRemarque :
    En raison de la nature de la diffusion sur les réseaux, sqlcmd risque 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).

    ms162806.security(fr-fr,SQL.90).gifRemarque 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 
    
    ms162806.security(fr-fr,SQL.90).gifRemarque relative à la sécurité :
    Pour masquer votre mot de passe, ne spécifiez pas l'option -P avec l'option -   U. Après la spécification de osql avec l'option -U et d'autres commutateurs (ne spécifiez pas -P), appuyez plutôt 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.
  • -Sserver_name[ **\instance_name]
    Spécifie l'instance de Microsoft SQL Server à laquelle établir une connexion. Spécifiez server_name pour vous connecter à l'instance par défaut de SQL Server sur ce serveur. Spécifiez server_name
    \**instance_name pour la connexion à 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
    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.
  • -d db_name
    Émet une instruction USE 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.
  • -t time_out
    Spécifie le nombre de secondes accordées pour l'exécution d'une commande. Si une valeur time_out n'est pas spécifiée, les commandes n'ont pas de délai d'expiration.
  • -h headers
    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).
  • -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 column_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 de packet_size sont comprises entre 512 et 65535. La valeur par défaut est celle du serveur osql. 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 plus grande peut être nécessaire, mais osql reprend 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 Microsoft SQL Server. La connexion osql utilise les options spécifiées dans la source de données.

    ms162806.note(fr-fr,SQL.90).gifRemarque :
    Cette option ne fonctionne pas avec les sources de données définies pour les autres pilotes.
  • -c cmd_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 sort immédiatement de 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 error_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, aucun espace ne doit exister entre le paramètre et sa valeur (-m-1, pas -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.
  • -i input_file
    Identifie le fichier contenant un lot d'instructions SQL ou de procédures stockées. Le symbole 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 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 et si -u est spécifié, output_file est stocké au format Unicode.

  • -p
    Affiche les statistiques sur les performances.
  • -b
    Spécifie l'existence de osql 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 par lots Microsoft MS-DOS peuvent tester la valeur de DOS ERRORLEVEL et traiter l'erreur d'une manière appropriée.
  • -u
    Spécifie l'enregistrement de output_file 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 la désactivation de certaines fonctions de osql pour s'adapter au comportement de précédentes versions de isql. Les fonctionnalités suivantes sont désactivées :

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

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

ms162806.note(fr-fr,SQL.90).gifRemarque :
Les commandes -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 ci-dessus 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 spécifiez un nom d'utilisateur lorsque vous démarrez osql, SQL Server vérifie les variables d'environnement et utilise celles-ci, 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 Windows Microsoft de l'utilisateur exécutant osql.

L'utilitaire osql utilise l'API ODBC. Cet utilitaire emploie les paramètres du pilote ODBC SQL Server pour les options de connexion SQL-92 de SQL Server. Pour plus d'informations, consultez « Effets des options SQL-92 ».

ms162806.note(fr-fr,SQL.90).gifRemarque :
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.

ms162806.note(fr-fr,SQL.90).gifRemarque :
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 lot 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 lot à 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 1000 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 lot d'instructions. 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
ms162806.security(fr-fr,SQL.90).gifRemarque 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 envoie le script SQL qui se trouve dans file_name directement au serveur sous la forme d'un lot unique.

ms162806.note(fr-fr,SQL.90).gifRemarque :
Lors de l'utilisation d'osql, SQL Server traite le séparateur de lots « 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'EXITpour retourner des résultats dans osql

Vous pouvez utiliser le résultat d'une instruction SELECT comme valeur retournée 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 lot d'instructions, puis quitte l'utilitaire sans retourner de valeur.

Il existe quatre formats de sortie :

  • EXIT
ms162806.note(fr-fr,SQL.90).gifRemarque :
N'exécute pas le lot ; ferme immédiatement l'utilitaire et ne retourne aucune valeur.
  • EXIT**(** )
ms162806.note(fr-fr,SQL.90).gifRemarque :
Exécute le lot, puis quitte sans retourner de valeur.
  • EXIT**(requête)**
ms162806.note(fr-fr,SQL.90).gifRemarque :
Exécute le lot, y compris la requête, puis quitte en retournant les résultats de la requête.
  • RAISERROR avec une gravité de 127
ms162806.note(fr-fr,SQL.90).gifRemarque :
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 arrête l'exécution du script osql et envoie au client le message 50001.

Les valeurs retournées de -1 à -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, tandis que SQL Server les conserve 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 103496, ce qui indique que la valeur est bien enregistrée avec toutes ses décimales.

Voir aussi

Autres ressources

/*...*/ (Commentaire) (MDX)
-- (Commentaire) (MDX)
CAST et CONVERT (Transact-SQL)
Sécurisation de Notification Services
RAISERROR (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005