Partager via


Utilitaire sqlcmd

L'utilitaire sqlcmd vous permet d'entrer des procédures système, des fichiers de script et des instructions Transact-SQL à l'invite de commandes dans l'Éditeur de requête en mode SQLCMD, dans un fichier de script Windows ou dans une étape de travail de système d'exploitation (Cmd.exe) d'un travail de l'Agent SQL Server. Cet utilitaire utilise OLE DB pour exécuter des traitements Transact-SQL.

Important

SQL Server Management Studio utilise Microsoft.NET FrameworkSqlClient pour l'exécution en mode régulier et SQLCMD dans le composant Éditeur de requête. Lorsque sqlcmd est exécuté à partir de la ligne de commande, il utilise le fournisseur OLE DB. Dans la mesure où différentes options par défaut peuvent s'appliquer, vous pouvez constater un comportement différent lorsque vous exécutez la même requête dans SQL Server Management Studio en mode SQLCMD et dans l'utilitaire sqlcmd.

Syntaxe

sqlcmd 
[{ { -U login_id [ -P password ] } | –E trusted connection }] 
[ -z new password ] [ -Z new password and exit]
[ -S server_name [ \ instance_name ] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection] 
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output] [ -r [ 0 | 1 ] msgs to stderr ] 
[ -R use client regional settings]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit] 
[ -e echo input ] [ -t query time_out ] 
[ -I enable Quoted Identifiers ] 
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ] 
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ] 
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort] [ -V severitylevel ] [ -m error_level ] 
[ -a packet_size ][ -c cmd_end ] 
[ -L [ c ] list servers[clean output] ] 
[ -p [ 1 ] print statistics[colon format]] 
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit] 
[ -? show syntax summary]

Options de ligne de commande

  • Options liées aux connexions

  • -Ulogin_id
    ID de connexion de l'utilisateur.

    [!REMARQUE]

    La variable d'environnement OSQLUSER est disponible à des fins de compatibilité descendante. La variable d'environnement SQLCMDUSER est prioritaire par rapport à la variable d'environnement OSQLUSER. Il est donc possible d'utiliser sqlcmd et osql côte à côte sans interférence. Cela signifie également que les scripts osql existants continueront de fonctionner.

    Si ni l'option -U, ni l'option -P ne sont spécifiées, sqlcmd tente de se connecter en utilisant l'authentification Microsoft Windows. L'authentification est basée sur le compte Windows de l'utilisateur exécutant sqlcmd.

    Si l'option -U est utilisée avec l'option -E (décrite plus loin dans cette rubrique), un message d'erreur est généré. Si l'option -U est suivie de plusieurs arguments, un message d'erreur est généré et le programme se termine.

  • -Ppassword
    Spécifie le mot de passe pour l'utilisateur. Les mots de passe respectent la casse. Si l'option -U et utilisée alors que l'option -P n'est pas utilisée, et la variable d'environnement SQLCMDPASSWORD n'a pas été définie, sqlcmd demande à l'utilisateur d'entrer un mot de passe. Si vous utilisez l'option -P à la fin de l'invite de commandes sans spécifier de mot de passe, sqlcmd 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.

    L'invite du mot de passe s'affiche sur la console de la manière suivante : Password:

    L'entrée de l'utilisateur est masquée. ce qui signifie que rien ne s'affiche et que le curseur reste immobile.

    La variable d'environnement SQLCMDPASSWORD vous permet de définir un mot de passe par défaut pour la session en cours. Par conséquent, les mots de passe n'ont pas besoin d'être codés en dur dans des fichiers de commandes.

    L'exemple suivant définit la variable SQLCMDPASSWORD au niveau de l'invite de commandes et accède ensuite à l'utilitaire sqlcmd. À l'invite de commandes, tapez :

    SET SQLCMDPASSWORD= p@a$$w0rd

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

    Le mot de passe sera visible par toute personne pouvant voir l'écran de l'ordinateur.

    À l'invite de commandes suivante, tapez :

    sqlcmd

    Si la combinaison de nom d'utilisateur et de mot de passe est incorrecte, le fournisseur OLE DB génère un message d'erreur.

    [!REMARQUE]

    La variable d'environnement OSQLPASSWORD a été conservée pour garantir une compatibilité descendante. La variable d'environnement SQLCMDPASSWORD est prioritaire sur la variable d'environnement OSQLPASSWORD ; sqlcmd et osql peuvent donc être utilisés l'un à côté de l'autre sans interférence et les anciens scripts continuent à fonctionner.

    Si l'option -P est utilisée avec l'option -E, un message d'erreur est généré.

    Si l'option -P est suivie de plusieurs arguments, un message d'erreur est généré et le programme se termine.

  • -E trusted connection
    Utilise une connexion approuvée au lieu d'un nom d'utilisateur et un mot de passe pour vous connecter à SQL Server. Par défaut, lorsque -E est spécifié, sqlcmd utilise l'option de connexion approuvée.

    L'option -E ignore les éventuels paramètres de variables d'environnement de nom d'utilisateur et de mot de passe, tels que SQLCMDPASSWORD. Si l'option -E est utilisée avec l'option -U ou l'option -P, un message d'erreur est généré.

  • -z new password
    Modifier le mot de passe :

    sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

  • -Z new password and exit
    Modifier le mot de passe et quitter :

    sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

  • -Sserver_name [ **\**instance_name ]
    Spécifie l'instance de SQL Server à laquelle établir une connexion. Cette option définit la variable de script sqlcmd SQLCMDSERVER.

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

    Si vous ne spécifiez aucun paramètre server_name [ **\**instance_name ] au moment de démarrer sqlcmd, SQL Server recherche et utilise la variable d'environnement SQLCMDSERVER.

    [!REMARQUE]

    La variable d'environnement OSQLSERVER a été conservée pour assurer une compatibilité descendante. La variable d'environnement SQLCMDSERVER est prioritaire par rapport à la variable d'environnement OSQLSERVER ; sqlcmd et osql peuvent donc être utilisés l'un à côté de l'autre sans interférence et les anciens scripts continuent à fonctionner.

  • -Hwksta_name
    Nom d'une station de travail. Cette option définit la variable de script sqlcmd SQLCMDWORKSTATION. Le nom de la station de travail est indiqué dans la colonne hostname de l'affichage catalogue sys.processes et peut être retourné à l'aide de la procédure stockée sp_who. Si cette option n'est pas spécifiée, le nom de l'ordinateur actif est utilisé par défaut. Ce nom peut être utilisé pour identifier différentes sessions sqlcmd.

  • -ddb_name
    Exécute une instruction USE db_name lors du démarrage de sqlcmd. Cette option définit la variable de script sqlcmd SQLCMDDBNAME. Celle-ci spécifie la base de données initiale. La valeur par défaut est la propriété de base de données par défaut de votre connexion. Si la base de données n'existe pas, un message d'erreur est généré et sqlcmd se termine.

  • -llogintime_out
    Spécifie le nombre de secondes au terme duquel une connexion sqlcmd au fournisseur OLE DB expire lorsque vous tentez d'établir une connexion à un serveur. Cette option définit la variable de script sqlcmd SQLCMDLOGINTIMEOUT. Le délai d'attente par défaut pour la connexion à sqlcmd est de huit secondes. Le délai d'attente de connexion doit être un nombre compris entre 0 et 65534. Si la valeur fournie n'est pas numérique et n'est pas comprise dans ces limites, sqlcmd génère un message d'erreur. Une valeur de 0 spécifie un délai d'attente infini.

  • -A dedicated admin connection
    Se connecte à SQL Server avec une connexion DAC (Dedicated Administrator Connection). Ce type de connexion est utilisé pour dépanner un serveur. Elle ne fonctionne qu'avec les serveurs prenant en charge DAC. Si DAC n'est pas disponible, sqlcmd génère un message d'erreur et se termine. Pour plus d'informations sur DAC, consultez Utilisation d'une connexion d'administrateur dédiée.

  • Options d'entrée/sortie

  • -i input_file[***,***input_file2...]
    Identifie le fichier contenant un traitement d'instructions SQL ou des procédures stockées. Plusieurs fichiers peuvent être spécifiés, ils sont lus et traités dans l'ordre. N'utilisez pas d'espace entre les noms de fichiers. sqlcmdvérifie d'abord que tous les fichiers spécifiés existent. Si un ou plusieurs fichiers n'existent pas, sqlcmd se termine. Les options -i et -Q/-q s'excluent mutuellement.

    Exemples de chemins :

    -i C:\<nom_de_fichier>

    -i \\<Serveur>\<Partage$>\<nom_de_fichier>

    -i "C:\Dossier\<nom_de_fichier>"

    Les chemins d'accès aux fichiers comportant des espaces doivent être placés entre guillemets.

    Cette option peut être utilisée plusieurs fois : -i input_file -i I input_file.

  • -ooutput_file
    Identifie le fichier recevant une sortie de sqlcmd.

    Si -u est spécifié, le fichier output_file est stocké au format Unicode. Si le nom de fichier n'est pas valide, un message d'erreur est généré et sqlcmd se termine. sqlcmd ne prend pas en charge l'écriture simultanée de plusieurs processus sqlcmd dans le même fichier. La sortie fichier sera endommagée ou incorrecte. Reportez-vous au commutateur -f pour plus d'informations sur les formats de fichier. Ce fichier sera créé s'il n'existe pas. Un fichier portant le même nom qui provient d'une session sqlcmd antérieure sera écrasé. Le fichier spécifié ici n'est pas le fichier stdout. Si un fichier stdout est spécifié, ce fichier ne sera pas utilisé.

    Exemples de chemins :

    -o C:\< nom_de_fichier>

    -o \\<Serveur>\<Partage$>\<nom_de_fichier>

    **-o "**C:\Dossier\<nom_de_fichier>"

    Les chemins d'accès aux fichiers comportant des espaces doivent être placés entre guillemets.

  • -f < codepage > | i: < codepage > [ <, o: < codepage > ]
    Spécifie les pages de codes d'entrée et de sortie. Le numéro de pages de codes est une valeur numérique spécifiant une page de codes Windows installée. Pour plus d'informations, consultez Paramètres de classement du programme d'installation.

    Règles de conversion des pages de code :

    • Si aucune page de codes n'est spécifiée, sqlcmd utilise la page de codes en cours, à la fois pour le fichier d'entrée et le fichier de sortie, sauf si le fichier d'entrée est un fichier Unicode, auquel cas aucune conversion n'est requise.

    • sqlcmd reconnaît automatiquement les fichiers d'entrée Unicode Big-endian et Little-endian. Si l'option -u est spécifiée, les données de sortie seront toujours de type Unicode Little-endian.

    • Si aucun fichier de sortie n'est spécifié, la page de codes de sortie correspond à la page de codes de la console. Cela permet aux données de sortie d'être correctement affichées sur la console.

    • Plusieurs fichiers d'entrée sont supposés correspondre à une même page de codes. Les fichiers d'entrée Unicode et non Unicode peuvent être mélangés.

    Entrez chcp à l'invite de commandes pour vérifier la page de codes de Cmd.exe.

  • -u unicode output
    Spécifie l'enregistrement de output_file au format Unicode, quel que soit le format de input_file.

  • -r[ 0 | 1] msgs to stderr
    Redirige la sortie des messages d'erreur à l'écran (stderr). Si vous n'indiquez aucun paramètre ou si vous spécifiez la valeur 0, seuls les messages d'erreur dotés d'un degré de gravité égal ou supérieur à 11 sont redirigés. Si vous indiquez la valeur 1, tous les messages émis, y compris PRINT, sont redirigés. Cette option n'a aucune incidence si vous utilisez -o. Par défaut, les messages sont envoyés à stdout.

  • -R use client regional settings
    Configure le fournisseur OLE DB SQL Server de manière à utiliser les paramètres régionaux du client lorsqu'il convertit des données de devises et de date et d'heure en données caractères. La valeur par défaut correspond aux paramètres régionaux du serveur.

  • Options liées à l'exécution de requêtes

  • -q" cmdline query "
    Exécute une requête au démarrage de sqlcmd, mais ne quitte pas sqlcmd au terme de l'exécution de la requête. Il est possible d'exécuter des requêtes séparées par plusieurs points-virgules. Placez la requête entre guillemets, comme dans l'exemple suivant.

    À l'invite de commandes, tapez :

    sqlcmd -d AdventureWorks -q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"

    sqlcmd -d AdventureWorks -q "SELECT TOP 5 FirstName FROM Person.Contact;SELECT TOP 5 LastName FROM Person.Contact;"

    Important

    N'utilisez pas le terminateur GO dans la requête.

    Si l'option -b est spécifiée avec cette option, sqlcmd se termine avec une erreur. La syntaxe de -b est décrite plus loin dans cette rubrique.

  • **-Q"**cmdline query " and exit
    Exécute une requête lorsque sqlcmd démarre, puis quitte immédiatement sqlcmd. Il est possible d'exécuter des requêtes séparées par plusieurs points-virgules.

    Placez la requête entre guillemets, comme dans l'exemple suivant.

    À l'invite de commandes, tapez :

    sqlcmd -d AdventureWorks -Q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"

    sqlcmd -d AdventureWorks -Q "SELECT TOP 5 FirstName FROM Person.Contact;SELECT TOP 5 LastName FROM Person.Contact;"

    Important

    N'utilisez pas le terminateur GO dans la requête.

    Si l'option -b est spécifiée avec cette option, sqlcmd se termine avec une erreur. L'option -b est traitée ultérieurement dans cette rubrique.

  • -e echo input
    Écrit des scripts d'entrée sur le périphérique de sortie standard (stdout).

  • -I enable Quoted Identifiers
    Attribue la valeur ON à l'option de connexion SET QUOTED_IDENTIFIER. La valeur OFF est choisie par défaut. Pour plus d'informations, consultez SET QUOTED_IDENTIFIER (Transact-SQL).

  • -tquerytime_out
    Spécifie le nombre de secondes accordées pour l'exécution d'une commande (ou une instruction SQL). Cette option définit la variable de script sqlcmd SQLCMDSTATTIMEOUT. Si une valeur time_out n'est pas spécifiée, la commande n'a pas de délai d'expiration. La valeur querytime_out doit être un nombre compris entre 1 et 65 535. Si la valeur indiquée n'est pas numérique ou n'est pas comprise dans cette plage, sqlcmd génère un message d'erreur.

    [!REMARQUE]

    La valeur de délai d'expiration réelle peut différer de quelques secondes de la valeur time_out.

  • -vvar*=value[ var=*value...]
    Crée une variable de script sqlcmd pouvant être utilisée dans un script sqlcmd. Placez la valeur entre guillemets si elle comporte des espaces. Vous pouvez spécifier plusieurs valeurs var="values". Si l'une des valeurs spécifiées comporte une erreur, sqlcmd génère un message d'erreur puis se termine.

    sqlcmd -v MyVar1=something MyVar2="some thing"

    sqlcmd -v MyVar1=something -v MyVar2="some thing"

  • -x disable variable substitution
    Demande à sqlcmd d'ignorer les variables de script. Cela s'avère utile lorsqu'un script contient de nombreuses instructions INSERT pouvant contenir des chaînes dotées du même format que des variables régulières, tel que $(variable_name).

  • Options liées à la mise en forme

  • -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 ensemble de résultats d'une requête. Cette option définit la variable de script sqlcmd SQLCMDHEADERS. Utilisez -1 pour indiquer qu'aucun en-tête ne sera imprimé. En présence d'une valeur non valide, sqlcmd génère un message d'erreur et se termine.

  • -scol_separator
    Spécifie le caractère de séparation des colonnes. Le caractère espace est utilisé par défaut. Cette option définit la variable de script sqlcmd SQLCMDCOLSEP. Pour utiliser des caractères ayant une signification spéciale pour le système d'exploitation, tels que le « et » commercial (&) ou le point-virgule (;), placez ce caractère entre guillemets ("). Le séparateur des colonnes peut être n'importe quel caractère 8 bits.

  • -wcolumn_width
    Spécifie la largeur d'écran pour la sortie. Cette option définit la variable de script sqlcmd SQLCMDCOLWIDTH. La largeur de colonne doit être un nombre supérieur à 8 et inférieur à 65536. Si la largeur de colonne spécifiée n'est pas dans ces limites, sqlcmd génère un message d'erreur. La largeur par défaut est de 80 caractères. Lorsque la longueur d'une ligne de sortie est supérieure à la largeur de colonne spécifiée, elle revient à la ligne suivante.

  • -W remove trailing spaces
    Cette option supprime les espaces à droite d'une colonne. Utilisez cette option avec l'option -s lors de la préparation de données à exporter dans une autre application. Elle ne peut pas être utilisée avec les options -y ou -Y.

  • -k[ 1 | 2 ] remove[replace] control characters
    Supprime de la sortie tous les caractères de contrôle, par exemple les tabulations et les caractères de nouvelle ligne. Cela préserve la mise en forme des colonnes lorsque des données sont retournées. Si 1 est spécifié, les caractères de contrôle sont remplacés par un espace. Si 2 est spécifié, les caractères de contrôle sont remplacés par un espace.

  • -ydisplay_width
    Définit la variable de script sqlcmd SQLCMDMAXFIXEDTYPEWIDTH. La valeur par défaut est 0 (non définie). Elle limite le nombre de caractères retournés pour les types de données à variables importantes en longueur :

    • varchar(max)

    • nvarchar(max)

    • varbinary(max)

    • xml

    • UDT (types de données définis par l'utilisateur)

    • text

    • ntext

    • image

    [!REMARQUE]

    Les types UDT peuvent être de longueur fixe, selon la mise en œuvre. Si cette longueur d'un type UDT à longueur fixe est inférieure à display_width, la valeur du type UDT retournée n'est pas affectée. Cependant, si la longueur est supérieure à display_width, la sortie est tronquée.

    Si display_width possède la valeur 0, la sortie est tronquée à 1 Mo. Vous pouvez utiliser la commande :XML ON pour empêcher que la sortie ne soit tronquée. La commande :XML ON est décrite plus loin dans cette rubrique.

    Important

    Utilisez l'option -y 0 avec une extrême prudence, car elle peut créer de graves problèmes de performances sur le serveur et le réseau, en fonction de la taille des données retournées.

  • -Ydisplay_width
    Définit la variable de script sqlcmd SQLCMDMAXVARTYPEWIDTH. La valeur par défaut est 256. Limite le nombre de caractères retournés pour les types de données suivants :

    • char

    • nchar

    • varchar(n), où 1<n<8000

    • nvarchar(n) où 1<n<4000

    • sql_variant

  • Options liées aux rapports d'erreurs

  • -b on error batch abort
    Spécifie l'existence de sqlcmd et retourne une valeur DOS ERRORLEVEL lorsqu'une erreur se produit. La valeur qui est retournée à la variable DOS ERRORLEVEL est 1 lorsque le message d'erreur de SQL Server possède un niveau de gravité supérieur à 10 ; sinon, la valeur retournée est 0. Si l'option -V a été définie en complément de -b, sqlcmd ne signale pas d'erreur si le niveau de gravité est inférieur aux valeurs définies à l'aide de -V. Les fichiers de commandes peuvent tester la valeur d'ERRORLEVEL et traiter l'erreur en conséquence. sqlcmd ne signale pas d'erreurs pour un niveau de gravité 10 (messages d'information).

    Si le script sqlcmd contient un commentaire incorrect, une erreur de syntaxe ou si une variable de script est manquante, la valeur ERRORLEVEL retournée est 1.

  • -V severitylevel
    Contrôle le niveau de gravité utilisé pour définir la variable ERRORLEVEL. Les messages d'erreur assortis de niveaux de gravité inférieurs ou égaux à cette valeur définissent ERRORLEVEL. Les valeurs inférieures à 0 sont signalées comme étant 0. La valeur de la variable ERRORLEVEL peut être testée au moyen de fichiers de commandes et CMD.

  • -merror_level
    Détermine les messages d'erreur envoyés à stdout. Les messages assortis d'un niveau de gravité inférieur ou égal à ce niveau sont envoyés. Lorsque cette valeur est -1, tous les messages, y compris les messages d'information, sont envoyés. Les espaces ne sont pas autorisés entre -m et -1. Par exemple, -m-1 est valide, mais -m-1 ne l'est pas.

    Cette option définit également la variable de script sqlcmd SQLCMDERRORLEVEL. La valeur par défaut de cette variable est 0.

  • Options diverses

  • -apacket_size
    Demande un paquet d'une taille différente. Cette option définit la variable de script sqlcmd SQLCMDPACKETSIZE. packet_size doit être une valeur comprise entre 512 et 32 767. La valeur par défaut est 4 096. Une taille de paquet plus grande peut améliorer les performances de l'exécution des scripts comportant un grand nombre d'instructions SQL entre des commandes GO. Vous pouvez demander une taille de paquet plus élevée. Cependant, si la requête est refusée, sqlcmd adopte la taille de paquet par défaut du serveur comme taille de paquet.

  • -ccmd_end
    Spécifie le terminateur de traitement. 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 modifiez de terminateur de traitement, 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

  • -L [ c ] list servers[clean output]
    Répertorie tous les serveurs configurés localement et le nom des serveurs diffusant sur le réseau. Ce paramètre ne peut pas être utilisé en combinaison avec d'autres paramètres. Le nombre maximal de serveurs pouvant être répertoriés est de 3 000. Si la liste de serveurs est tronquée en raison de la taille de la mémoire tampon, un message d'avertissement s'affiche.

    [!REMARQUE]

    Compte tenu de la nature de la diffusion sur les réseaux, il est possible que sqlcmd ne reçoive pas 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.

    Si le paramètre facultatif c est spécifié, la sortie apparaît sans ligne d'en-tête Servers: et chaque ligne de serveur ne comporte pas d'espace à gauche. La sortie est alors dite « propre ». Une sortie propre améliore les performances de traitement des langages de script.

  • -p[ 1 ] print statistics[colon format]
    Imprime des statistiques de performances pour chaque ensemble de résultats. L'exemple suivant illustre le format des statistiques de performances :

    Network packet size (bytes): n

    x xact[s]:

    Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)

    Où :

    x = Nombre de transactions traitées par SQL Server.

    t1 = Durée totale de toutes les transactions.

    t2 = Durée moyenne d'une transaction spécifique.

    t3 = Nombre moyen de transactions transmises par seconde.

    Toutes les durées sont exprimées en millisecondes.

    Si le paramètre facultatif 1 est spécifié, les statistiques sont séparées par deux points et peuvent être aisément importées dans une feuille de calcul ou traitées par un script.

    Si le paramètre facultatif correspond à n'importe quelle valeur autre que 1, une erreur est générée et sqlcmd se termine.

  • -X [ 1 ] disable commands, startup script, enviroment variables [and exit]
    Désactive les commandes pouvant compromettre la sécurité du système lorsque sqlcmd est exécuté à partir d'un fichier de commandes. Les commandes désactivées sont toujours reconnues ; sqlcmd émet un message d'avertissement et continue. Si le paramètre facultatif 1 est spécifié, sqlcmd génère un message d'erreur, puis il se termine. Les commandes suivantes sont désactivées lorsque l'option -X est utilisée :

    • ED

    • **!!**command

    Si l'option -X est spécifiée, elle empêche le passage des variables d'environnement à sqlcmd. Elle interdit également l'exécution du script de démarrage spécifié au moyen de la variable de script SQLCMDINI. Pour plus d'informations sur les variables de script sqlcmd, consultez Utilisation de sqlcmd avec des variables de script.

  • -? show syntax summary
    Affiche le résumé de la syntaxe des options de sqlcmd.

Notes

Les options ne doivent pas nécessairement être utilisées dans l'ordre indiqué dans la section de la syntaxe.

Lorsque plusieurs résultats sont retournés, sqlcmd imprime une ligne vide entre chaque ensemble de résultats dans un traitement. En outre, le message « <x> lignes affectées » n'apparaît pas lorsqu'il ne s'applique pas à l'instruction en cours d'exécution.

Pour utiliser sqlcmd de façon interactive, tapez sqlcmd à l'invite de commandes avec une ou plusieurs des options décrites plus haut dans cette rubrique. Pour plus d'informations, consultez Utilisation de l'utilitaire sqlcmd

[!REMARQUE]

Avec les options -L, -Q, -Z ou -i, sqlcmd quitte après l'exécution.

La longueur totale de la ligne de commande sqlcmd dans l'environnement de commande (Cmd.exe), comprenant tous les arguments et les variables développées, est la longueur déterminée par le système d'exploitation pour Cmd.exe.

Priorité des variables (faible à élevée)

  1. Variables d'environnement au niveau du système.

  2. Variables d'environnement au niveau de l'utilisateur.

  3. Environnement d'exécution de commande (SET X=Y) défini à l'invite de commandes avant l'exécution de sqlcmd.

  4. sqlcmd-v X=Y

  5. :Setvar X Y

[!REMARQUE]

Pour afficher les variables d'environnement, dans le Panneau de configuration, ouvrez Système, puis cliquez sur l'onglet Avancé.

Variables de script sqlcmd

Variable

Commutateur associé

Lecture/écriture

Valeur par défaut

SQLCMDUSER

-U

L

""

SQLCMDPASSWORD

-P

--

""

SQLCMDSERVER

-S

L

"DefaultLocalInstance"

SQLCMDWORKSTATION

-H

L

"ComputerName"

SQLCMDDBNAME

-d

L

""

SQLCMDLOGINTIMEOUT

-l

Lecture/écriture

"8" (secondes)

SQLCMDSTATTIMEOUT

-t

Lecture/écriture

"0" = Attendre indéfiniment

SQLCMDHEADERS

-h

Lecture/écriture

"0"

SQLCMDCOLSEP

-s

Lecture/écriture

" "

SQLCMDCOLWIDTH

-w

Lecture/écriture

"0"

SQLCMDPACKETSIZE

-a

L

"4096"

SQLCMDERRORLEVEL

-m

Lecture/écriture

0

SQLCMDMAXVARTYPEWIDTH

-y

Lecture/écriture

"256"

SQLCMDMAXFIXEDTYPEWIDTH

-Y

Lecture/écriture

"0" = illimitée

SQLCMDEDITOR

Lecture/écriture

"edit.com"

SQLCMDINI

L

""

Les variables SQLCMDUSER, SQLCMDPASSWORD et SQLCMDSERVER sont définies lorsque la commande :Connect

est utilisée.

« Lecture » indique que la valeur ne peut être définie qu'une seule fois lors de l'initialisation du programme.

« Lecture/écriture » indique que la valeur peut être modifiée à l'aide de la commande setvar et que les commandes ultérieures sont tributaires de la nouvelle valeur.

Commandes sqlcmd

En complément des instructions Transact-SQL dans sqlcmd, vous pouvez également utiliser les commandes ci-dessous :

GO [count]

:List

[:] RESET

:Error

[:] ED

:Out

[:] !!

:Perftrace

[:] QUIT

:Connect

[:] EXIT

:On Error

:r

:Help

:ServerList

:XML [ON | OFF]

:Setvar

:Listvar

Tenez compte des éléments suivants lorsque vous utilisez des commandes sqlcmd :

  • Toutes les commandes sqlcmd, à l'exception de GO, doivent posséder deux points (:) comme préfixe.

    Important

    Pour assurer la compatibilité descendante avec les scripts osql existants, certaines commandes sont reconnues sans les deux-points. Cela est indiqué par le [:].

  • Les commandes sqlcmd ne sont reconnues que si elles apparaissent au début d'une ligne.

  • Toutes les commandes sqlcmd ne respectent pas la casse.

  • Chaque commande doit figurer sur une ligne séparée. Une commande ne peut pas être suivie d'une instruction Transact-SQL ou d'une autre commande.

  • Les commandes sont exécutées immédiatement. Elles ne sont pas placées dans le tampon d'exécution contrairement aux instructions Transact-SQL.

  • Commandes d'édition

  • [:] ED
    Démarre l'éditeur de texte. Cet éditeur peut être employé pour modifier le traitementTransact-SQL en cours, ou le dernier traitement exécuté. Pour modifier le dernier traitement exécuté, la commande ED doit être tapée immédiatement après la fin de l'exécution du dernier traitement.

    L'éditeur de texte est défini dans la variable d'environnement SQLCMDEDITOR. L'éditeur par défaut est « edit ». Pour modifier l'éditeur, définissez la variable SQLCMDEDITOR. Par exemple, pour choisir l'éditeur Bloc-notes Microsoft, à l'invite de commandes, tapez :

    SET SQLCMDEDITOR=notepad

  • [:] RESET
    Vide le cache d'instruction.

  • :List
    Imprime le contenu du cache d'instruction.

  • Variables

  • :Setvar <var> [ "value" ]
    Définit des variables de script sqlcmd. Les variables de script possèdent le format suivant : $(VARNAME).

    Les noms de variable ne respectent pas la casse.

    Les variables de script peuvent être définies comme suit :

    • Implicitement à l'aide d'une option de ligne de commande. Par exemple, l'option -l définit la variable sqlcmd SQLCMDLOGINTIMEOUT.

    • Explicitement à l'aide de la commande :Setvar.

    • En définissant une variable d'environnement avant d'exécuter sqlcmd.

    [!REMARQUE]

    L'option -X empêche le transfert des variables d'environnement vers sqlcmd.

    Si une variable définie à l'aide de :Setvar et une variable d'environnement possèdent le même nom, la variable définie à l'aide de :Setvar est prioritaire.

    Les noms de variable ne doivent pas contenir de caractères espace.

    Les noms de variables ne peuvent pas posséder la même forme qu'une expression variable, telle que $(var).

    Si une valeur de chaîne de la variable de script contient des espaces, placez la valeur entre guillemets. Si aucune valeur n'est spécifiée pour une variable de script, cette dernière est supprimée.

  • :Listvar
    Affiche la liste des variables de script actuellement définies.

    [!REMARQUE]

    Seules les variables de script qui sont définies par sqlcmd et celles qui sont définies avec la commande :Setvar s'affichent.

  • Commandes de sortie

  • :Error **<filename>|STDERR|STDOUT
    Redirige l'ensemble de la sortie d'erreur dans le fichier spécifié par file name, vers stderr ou vers stdout. La commande Error peut apparaître plusieurs fois dans un script. Par défaut, la sortie d'erreur est envoyée à stderr.

    • file name
      Crée et ouvre un fichier destiné à recevoir la sortie. Si le fichier existe déjà, il est tronqué à zéro octet. Si le fichier n'est pas disponible car des autorisations sont requises, ou pour d'autres raisons, la sortie n'est pas modifiée, et elle est envoyée à la dernière destination spécifiée ou à la destination par défaut.

    • STDERR
      Dirige la sortie d'erreur vers le flux stderr. Si cette destination a été redirigée, la cible de cette redirection reçoit la sortie d'erreur.

    • STDOUT
      Fait basculer la sortie d'erreur vers le flux stdout. Si cette destination a été redirigée, la cible de cette redirection reçoit la sortie d'erreur.

  • :Out <filename>| STDERR| STDOUT
    Crée et redirige l'ensemble des résultats de requête dans le fichier spécifié par file name, vers stderr ou vers stdout. Par défaut, la sortie est envoyée à stdout. Si le fichier existe déjà, il est tronqué à zéro octet. La commande Out peut apparaître plusieurs fois dans un script.

  • :Perftrace <filename>| STDERR| STDOUT
    Crée et redirige l'ensemble des informations de traces de performances dans le fichier spécifié par file name, vers stderr ou vers stdout. Par défaut, la sortie de traces de performances est envoyée à stdout. Si le fichier existe déjà, il est tronqué à zéro octet. La commande Perftrace peut apparaître plusieurs fois dans un script.

  • Commandes de contrôle d'exécution

  • :On Error[ exit| ignore]
    Définit l'action à effectuer lorsqu'une erreur se produit en cours de script ou d'exécution d'un traitement.

    Lorsque l'option exitest employée, sqlcmd se termine avec la valeur d'erreur appropriée.

    Lorsque l'option ignore est employée, sqlcmd ignore l'erreur et poursuit l'exécution du traitement ou du script. Par défaut, un message d'erreur est imprimé.

  • [:] QUIT
    Provoque la fin de sqlcmd.

  • [:] EXIT[ (statement) ]
    Vous permet d'utiliser le résultat d'une instruction SELECT comme valeur de retour de sqlcmd. 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 200x 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. Par exemple, à l'invite de commandes, tapez :

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

    L'utilitaire sqlcmd envoie tout le contenu entre parenthèses () au serveur. Si une procédure stockée système 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 se termine sans valeur de retour.

    Lorsqu'une requête incorrecte est spécifiée, sqlcmd se termine sans valeur de retour.

    Liste des formats EXIT :

    • :EXIT

    N'exécute pas le traitement, puis se termine immédiatement sans retourner de valeur.

    • :EXIT( )

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

    • :EXIT(requête)

    Exécute le traitement qui inclut la requête, puis se termine après avoir retourné les résultats de la requête.

    Si RAISERROR est utilisé dans un script sqlcmd et qu'un état 127 se produit, sqlcmd se termine et retourne l'ID du message au client. Par exemple :

    RAISERROR(50001, 10, 127)

    Cette erreur arrête l'exécution du script sqlcmd et envoie au client le message 50001.

    Les valeurs retournées de -1 à -99 sont réservées à SQL Server ; sqlcmd définit les valeurs suivantes :

    Valeurs retournées

    Description

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

  • GO [count]
    GO indique la fin d'un traitement et l'exécution des commandes Transact-SQL placées dans le cache. Lors de la spécification d'une valeur pour count, les instructions mises en mémoire cache sont exécutées count fois, comme un traitement unique.

  • Commandes diverses

  • :r <filename>
    Analyse les instructions Transact-SQL et commandes sqlcmd supplémentaires du fichier spécifié par **<filename>**dans le cache d'instruction.

    Si le fichier contient des instructions Transact-SQL qui ne sont pas suivies de GO,vous devez entrer GO sur la ligne qui suit :r.

    [!REMARQUE]

    <filename> est lu par rapport au répertoire de démarrage dans lequel sqlcmd a été exécuté.

    Le fichier est lu et exécuté après la rencontre d'un terminateur de traitement. Vous pouvez émettre plusieurs commandes :r. Le fichier peut inclure une commande sqlcmd. Elle inclut le terminateur de traitement GO.

    [!REMARQUE]

    Le nombre de lignes affichées en mode interactif augmente de 1 chaque fois qu'une commande :r est rencontrée. La commande :r apparaît dans la sortie de la commande list.

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

  • :Connect server_name[**\**instance_name] [-l timeout] [-U user_name [-P password]]
    Établit une connexion à une instance de SQL Server. Ferme également la connexion actuelle.

    Options de délai :

    0

    attendre indéfiniment

    n>0

    attendre n secondes

    La variable de script SQLCMDSERVER reflète la connexion active actuelle.

    Si l'argument timeout n'est pas spécifié, la valeur de la variable SQLCMDLOGINTIMEOUT est la valeur par défaut.

    Si seulement user_nameest spécifié (en tant qu'option ou en tant que variable d'environnement), un message invite l'utilisateur à entrer un mot de passe. Cela ne s'applique pas si les variables d'environnement SQLCMDUSER ou SQLCMDPASSWORD ont été définies. Si ni les options ni les variables d'environnement ne sont fournies, le mode d'authentification Windows est employé pour se connecter. Par exemple, pour établir une connexion à une instance, instance1, de SQL Server, myserver, en utilisant à la sécurité intégrée, vous devez utiliser ce qui suit :

    :connect myserver\instance1

    Pour établir une connexion à l'instance par défaut de myserver en utilisant des variables de script, utilisez ce qui suit :

    :setvar myusername test

    :setvar myservername myserver

    :connect $(myservername) $(myusername)

  • [:] !!< command>
    Exécute des commandes du système d'exploitation. Pour exécuter une commande du système d'exploitation, commencez une ligne par deux points d'exclamation (!!) suivis de la commande du système d'exploitation. Exemple :

    :!! Dir

    [!REMARQUE]

    La commande est exécutée sur l'ordinateur sur lequel sqlcmd s'exécute.

  • :XML [ON | OFF]
    Pour plus d'informations, consultez « Format de sortie XML », plus loin dans cette rubrique.

  • :Help
    Répertorie les commandes sqlcmd avec une brève description de chaque commande.

Noms de fichiers sqlcmd

Les fichiers d'entrée sqlcmd peuvent être spécifiés avec l'option -i ou la commande :r. Les fichiers de sortie peuvent être spécifiés avec l'option -o ou les commandes :Error, :Out et :Perftrace. Voici quelques consignes relatives à l'utilisation de ces fichiers :

  • Les commandes :Error, :Out et :Perftrace doivent utiliser un <filename> séparé. Si le même <filename> est utilisé, les entrées des commandes peuvent être mélangées.

  • Si un fichier d'entrée qui est situé sur serveur distant est appelé à partir de sqlcmd sur un ordinateur local et que le fichier contient un chemin d'accès de fichier sur un lecteur tel que :out c:\OutputFile.txt, le fichier de sortie sera créé sur l'ordinateur local et non sur le serveur distant.

  • Les chemins d'accès de fichier valides sont les suivants : C:\<filename>,\\<Serveur>\<Partage$>\<filename> et "C:\Un dossier\<file name>". Si le chemin d'accès contient un espace, utilisez des guillemets.

  • Chaque nouvelle session sqlcmd écrasera les fichiers existants portant les mêmes noms.

Messages d'information

sqlcmd imprime un message d'information qui est envoyé par le serveur. Dans l'exemple suivant, après l'exécution des instructions Transact-SQL, un message d'information est imprimé.

À l'invite de commandes, tapez :

sqlcmd

At the sqlcmd prompt type:

USE AdventureWorks;

GO

Lorsque vous appuyez sur Entrée, le message d'information suivant s'affiche : « Le contexte de la base de données a changé ; il est maintenant 'AdventureWorks'. »

Format de sortie des requêtes Transact-SQL

sqlcmd imprime tout d'abord un en-tête de colonne qui contient les noms de colonne spécifiés dans la liste select. Les noms de colonne sont séparés avec le caractère SQLCMDCOLSEP. Par défaut, il s'agit d'un espace. Si le nom de colonne est plus court que la largeur de colonne, la sortie est complétée avec des espaces jusqu'à la colonne suivante.

Cette ligne est suivie d'un séparateur de ligne qui correspond à une série de tirets. La sortie suivante constitue un exemple.

Démarrez sqlcmd. À l'invite de commandes sqlcmd, tapez :

USE AdventureWorks;

SELECT TOP (2) ContactID, FirstName, LastName

FROM Person.Contact;

GO

Lorsque vous appuyez sur Entrée, l'ensemble de résultats suivant est retourné.

ContactID FirstName LastName

----------- ------------ ----------

1 Syed Abbas

2 Catherine Abel

(2 row(s) affected)

Bien que la colonne ContactID ne possède que 4 caractères de large, elle a été étendue pour contenir le nom de colonne plus long. Par défaut, la sortie se termine à 80 caractères. Cela peut être modifié à l'aide de l'option  -w ou en définissant la variable de script SQLCMDCOLWIDTH.

Format de sortie XML

La sortie XML qui est le résultat d'une clause FOR XML est générée, sans mise en forme, dans un flux continu.

Lorsque vous attendez une sortie XML, utilisez la commande suivante : :XML ON.

[!REMARQUE]

sqlcmd retourne des messages d'erreur au format habituel. Notez que les messages d'erreur sont également une sortie dans le flux de texte XML au format XML. Avec :XML ON, sqlcmd n'affiche aucun message d'information.

Pour désactiver le mode XML, utilisez la commande suivante : :XML OFF.

La commande GO ne doit pas apparaître avant la commande XML OFF car cette dernière remet sqlcmd en sortie orientée ligne.

Les données XML (diffusées en continu) et les données d'ensemble de lignes ne peuvent être mélangées. Si la commande XML ON n'a pas été émise avant l'exécution d'une instruction Transact-SQL qui génère des flux XML, la sortie est incohérente. Si la commande XML ON a été émise, vous ne pouvez pas exécuter des instructions Transact-SQL qui produisent des ensembles de lignes réguliers.

[!REMARQUE]

La commande :XML ne prend pas en charge l'instruction SET STATISTICS XML.

Méthodes conseillées sqlcmd

Utilisez les méthodes suivantes pour optimiser la sécurité et l'efficacité.

  • Utilisez la sécurité intégrée.

  • Utilisez -X dans des environnements automatisés.

  • Protégez les fichiers d'entrée et de sortie à l'aide des autorisations appropriées du système de fichiers NTFS.

  • Pour accroître les performances, effectuez autant d'opérations que possible au sein d'une session sqlcmd au lieu de recourir à une série de sessions.

  • Pour l'exécution de requête ou de traitement, définissez des valeurs de délai supérieures à la durée que vous prévoyez pour l'exécution du traitement ou de la requête.