Delen via


sqlcmd-hulpprogramma

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-database in Microsoft Fabric

Met het hulpprogramma sqlcmd kunt u Transact-SQL instructies, systeemprocedures en scriptbestanden invoeren via verschillende modi:

  • Bij de opdrachtprompt.
  • In Query-editor in de SQLCMD-modus.
  • In een Windows-scriptbestand.
  • In een besturingssysteem (cmd.exe) taakstap van een SQL Server Agent-taak.

Notitie

Hoewel Microsoft Entra ID de nieuwe naam is voor Azure Active Directory (Azure AD), om te voorkomen dat bestaande omgevingen worden onderbroken, blijft Azure AD in sommige hardcoded elementen, zoals ui-velden, verbindingsproviders, foutcodes en cmdlets. In dit artikel zijn de twee namen uitwisselbaar.

Ontdek welke versie u hebt geïnstalleerd

Er zijn twee versies van sqlcmd:

  • De go-mssqldb-gebaseerde sqlcmd, soms gestileerd als go-sqlcmd. Deze versie is een zelfstandig hulpprogramma dat u onafhankelijk van SQL Server kunt downloaden.

  • De op ODBC gebaseerde sqlcmd, beschikbaar met SQL Server of de Microsoft-opdrachtregelprogramma's en een deel van het mssql-tools-pakket op Linux.

Voer de volgende instructie uit op de opdrachtregel om te bepalen welke versie u hebt geïnstalleerd:

sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?

Als u de nieuwe versie van sqlcmd (Go) gebruikt, is de uitvoer vergelijkbaar met het volgende voorbeeld:

Version: 1.3.1

Versie controleren

U kunt sqlcmd --version gebruiken om te bepalen welke versie is geïnstalleerd. U moet ten minste versie 1.0.0 hebben geïnstalleerd.

Belangrijk

Als u sqlcmd (Go) installeert via een pakketbeheerder, vervangt u sqlcmd (ODBC) door sqlcmd (Go) in uw omgevingspad. Eventuele huidige opdrachtregelsessies moeten worden gesloten en opnieuw worden geopend om dit van kracht te laten worden. sqlcmd (ODBC) wordt niet verwijderd en kan nog steeds worden gebruikt door het volledige pad naar het uitvoerbare bestand op te geven. U kunt uw PATH variabele ook bijwerken om aan te geven welke prioriteit heeft. Hiervoor opent u systeeminstellingen in Windows 11 en gaat u naar Over > Geavanceerde systeeminstellingen. Wanneer systeemeigenschappen wordt geopend, selecteert u de knop Omgevingsvariabelen. Selecteer in de onderste helft van het scherm, onder Systeemvariabelen, Pad en selecteer vervolgens Bewerken. Als de locatie sqlcmd (Go) wordt opgeslagen naar (C:\Program Files\sqlcmd is standaard) en dit wordt vermeld vóór C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn, dan wordt sqlcmd (Go) gebruikt. U kunt de volgorde omkeren om sqlcmd (ODBC) de standaardwaarde opnieuw te maken.

Sqlcmd downloaden en installeren

sqlcmd (Go) kunnen platformoverschrijdend worden geïnstalleerd, op Microsoft Windows, macOS en Linux. Versies hoger dan 1.6 zijn mogelijk niet beschikbaar in alle pakketbeheerders. Er is nog geen geschatte datum voor hun beschikbaarheid.

winget (Windows Package Manager CLI)

  1. Installeer de Windows Package Manager-client als u deze nog niet hebt.

  2. Voer de volgende opdracht uit om sqlcmd (Go) te installeren.

    winget install sqlcmd
    

Chocolatey

  1. Installeer Chocolatey als u deze nog niet hebt.

  2. Voer de volgende opdracht uit om sqlcmd (Go) te installeren.

    choco install sqlcmd
    

Direct downloaden

  1. Download de bijbehorende -windows-amd64.zip of -windows-arm.zip asset uit de meest recente release van sqlcmd (Go) uit de GitHub-codeopslagplaats.

  2. Pak het sqlcmd.exe-bestand uit het gedownloade zip-bestand.

Vooraf geïnstalleerd

Azure Cloud Shell

U kunt het hulpprogramma sqlcmd proberen vanuit Azure Cloud Shell, omdat deze standaard vooraf is geïnstalleerd:

Azure Data Studio

Als u SQLCMD-instructies wilt uitvoeren in Azure Data Studio-, selecteert u SQLCMD- inschakelen op de werkbalk van de editor.

SQL Server Management Studio (SSMS)

Om SQLCMD-instructies uit te voeren in het SQL Server Management Studio (SSMS), selecteer de SQLCMD-modus in de vervolgkeuzelijst van het query-menu bovenaan.

SSMS maakt gebruik van de Microsoft .NET Framework-SqlClient voor uitvoering in de normale en SQLCMD-modus in Query-editor. Wanneer sqlcmd- vanaf de opdrachtregel wordt uitgevoerd, gebruikt sqlcmd het ODBC-stuurprogramma. Omdat er mogelijk verschillende standaardopties van toepassing zijn, ziet u mogelijk een ander gedrag wanneer u dezelfde query uitvoert in SSMS in de SQLCMD-modus en in het hulpprogramma sqlcmd.

Syntaxis

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

Zie ODBC sqlcmd-syntaxisvoor meer uitgebreide informatie over sqlcmd syntaxis en gebruik.

Ingrijpende wijzigingen van sqlcmd (ODBC)

Verschillende switches en gedragingen worden gewijzigd in het hulpprogramma sqlcmd (Go). Voor de meest up-to-datumlijst met ontbrekende vlaggen voor achterwaartse compatibiliteit, gaat u naar de Prioriteren implementatie van backcompatibiliteitsvlagmen GitHub-discussie.

  • In eerdere versies van sqlcmd (Go) is de -P-switch tijdelijk verwijderd en konden wachtwoorden voor SQL Server-verificatie alleen worden verstrekt via deze mechanismen:

    • De omgevingsvariabele SQLCMDPASSWORD
    • De opdracht :CONNECT
    • Wanneer hierom wordt gevraagd, kan de gebruiker het wachtwoord typen om een verbinding te voltooien
  • -r vereist een 0 of 1 argument

  • -R schakelaar wordt verwijderd.

  • -I schakelaar wordt verwijderd. Voeg SET QUOTED IDENTIFIER OFF toe aan uw scripts om het gedrag van geciteerde identifiers uit te schakelen.

  • -N gebruikt nu een tekenreekswaarde die een van true, falseof disable kan zijn om de versleutelingskeuze op te geven. (default is hetzelfde als het weglaten van de parameter)

    • Als -N en -C niet worden opgegeven, onderhandelt sqlcmd over verificatie met de server zonder het servercertificaat te valideren.
    • Als -N is opgegeven, maar -C niet is, moet sqlcmd het servercertificaat valideren. Een false waarde voor versleuteling kan nog steeds leiden tot de versleuteling van het aanmeldingspakket.
    • Als er zowel -N als -C worden opgegeven, gebruikt sqlcmd hun waarden voor versleutelingsonderhandeling.
    • Meer informatie over client-/serverversleutelingsonderhandeling vindt u op MS-TDS PRELOGIN-.
  • -u Het gegenereerde Unicode-uitvoerbestand bevat de UTF-16 Little-Endian bytevolgordemarkering (BOM).

  • Sommige gedragingen die zijn bewaard om de compatibiliteit met OSQL te behouden, kunnen worden gewijzigd, zoals het uitlijnen van kolomkoppen voor sommige gegevenstypen.

  • Alle opdrachten moeten op één regel passen, inclusief EXIT. In de interactieve modus wordt niet gecontroleerd op haakjes of aanhalingstekens voor opdrachten en wordt niet om opeenvolgende regels gevraagd. Dit gedrag verschilt van de ODBC-versie, die toestaat dat de door EXIT(query) uitgevoerde query zich over meerdere regels uitstrekt.

Verbindingen van het hulpprogramma sqlcmd (Go) zijn beperkt tot TCP-verbindingen. Benoemde pijpen worden op dit moment niet ondersteund in het go-mssqldb stuurprogramma.

Verbeteringen

  • :Connect heeft nu een optionele parameter voor -G om een van de verificatiemethoden voor Azure SQL Database te selecteren: SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword. Zie Microsoft Entra-verificatievoor meer informatie. Als -G niet is opgegeven, wordt geïntegreerde beveiliging of SQL Server-verificatie gebruikt, afhankelijk van de aanwezigheid van een -U gebruikersnaamparameter.

  • Met de nieuwe --driver-logging-level opdrachtregelparameter kunt u traceringen van het go-mssqldb stuurprogramma zien. Gebruik 64 om alle traceringen te bekijken.

  • sqlcmd- kunnen nu resultaten afdrukken met behulp van een verticale indeling. Gebruik de nieuwe -F vertical opdrachtregeloptie om het in te stellen. De SQLCMDFORMAT scriptvariabele bepaalt deze ook.

Opdrachtregelopties

-Een

Meldt u aan bij SQL Server met een toegewezen beheerdersverbinding (DAC). Dit type verbinding wordt gebruikt om problemen met een server op te lossen. Deze verbinding werkt alleen met servercomputers die DAC ondersteunen. Als DAC niet beschikbaar is, genereert sqlcmd- een foutbericht en wordt vervolgens afgesloten. Zie Diagnostische verbinding voor databasebeheerdersvoor meer informatie over DAC. De optie -A wordt niet ondersteund met de optie -G. Wanneer u verbinding maakt met Azure SQL Database met behulp van -A, moet u een beheerder zijn op de logische SQL-server. DAC is niet beschikbaar voor een Microsoft Entra-beheerder.

-C

Deze optie wordt door de client gebruikt om deze te configureren om impliciet het servercertificaat te vertrouwen zonder validatie. Deze optie is gelijk aan de ADO.NET optie TRUSTSERVERCERTIFICATE = true.

Voor het hulpprogramma sqlcmd (Go) zijn ook de volgende voorwaarden van toepassing:

  • Als -N en -C niet worden opgegeven, onderhandelt sqlcmd over verificatie met de server zonder het servercertificaat te valideren.
  • Als -N is opgegeven, maar -C niet is, moet sqlcmd het servercertificaat valideren. Een false waarde voor versleuteling kan nog steeds leiden tot de versleuteling van het aanmeldingspakket.
  • Als er zowel -N als -C worden opgegeven, gebruikt sqlcmd hun waarden voor versleutelingsonderhandeling.

-d db_name

Geeft een USE <db_name>-instructie uit wanneer u sqlcmd-start. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDDBNAME. Met deze parameter geeft u de initiële database op. De standaardwaarde is de standaarddatabaseeigenschap van uw aanmelding. Als de database niet bestaat, wordt er een foutbericht gegenereerd en sqlcmd afgesloten.

-D

Interpreteert de servernaam die is opgegeven voor -S als een DSN in plaats van een hostnaam. Zie DSN-ondersteuning in sqlcmd en bcp- in Verbinding maken met sqlcmdvoor meer informatie.

Notitie

De optie -D is alleen beschikbaar op Linux- en macOS-clients. Op Windows-clients werd eerder verwezen naar een nu verouderde optie die is verwijderd en wordt genegeerd.

-l login_timeout

Hiermee geeft u het aantal seconden op voordat een sqlcmd aanmelden bij het ODBC-stuurprogramma een time-out optreedt wanneer u verbinding probeert te maken met een server. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDLOGINTIMEOUT. De standaardtime-out voor aanmelding bij sqlcmd- is 8 seconden. Wanneer u de optie -G gebruikt om verbinding te maken met Azure SQL Database of Azure Synapse Analytics en te verifiëren met behulp van Microsoft Entra ID, wordt een time-outwaarde van ten minste 30 seconden aanbevolen. De time-out voor aanmelden moet een getal zijn tussen 0 en 65534. Als de opgegeven waarde niet numeriek is of niet in dat bereik valt, genereert sqlcmd- een foutbericht. Een waarde van 0 geeft een time-out op die oneindig moet zijn.

-E

Gebruikt een vertrouwde verbinding in plaats van een gebruikersnaam en wachtwoord te gebruiken om u aan te melden bij SQL Server. Standaard, zonder -E opgegeven, sqlcmd gebruikmaakt van de optie vertrouwde verbinding.

De optie -E negeert mogelijke omgevingsinstellingen voor gebruikersnaam en wachtwoordomgeving, zoals SQLCMDPASSWORD. Als de optie -E samen met de optie -U of de optie -P wordt gebruikt, wordt er een foutbericht gegenereerd.

-g

Hiermee stelt u de instelling Kolomversleuteling in op Enabled. Zie Always Encryptedvoor meer informatie. Alleen hoofdsleutels die zijn opgeslagen in het Windows-certificaatarchief, worden ondersteund. De optie -g vereist ten minste sqlcmd versie 13.1. Voer sqlcmd -?uit om uw versie te bepalen.

-G

Deze optie wordt door de client gebruikt bij het maken van verbinding met Azure SQL Database of Azure Synapse Analytics om op te geven dat de gebruiker wordt geverifieerd met behulp van Microsoft Entra-verificatie. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDUSEAAD = true. De optie -G vereist ten minste sqlcmd versie 13.1. Voer sqlcmd -?uit om uw versie te bepalen. Zie Verbinding maken met SQL Database of Azure Synapse Analytics met behulp van Microsoft Entra-verificatievoor meer informatie. De optie -A wordt niet ondersteund met de optie -G.

De optie -G is alleen van toepassing op Azure SQL Database en Azure Synapse Analytics.

Interactieve Microsoft Entra-verificatie wordt momenteel niet ondersteund in Linux of macOS. Geïntegreerde Microsoft Entra-verificatie vereist Microsoft ODBC-stuurprogramma 17 voor SQL Server versie 17.6.1 of hoger en een correct geconfigureerde Kerberos-omgeving.

Zie Microsoft Entra-verificatie in sqlcmdvoor meer informatie over Microsoft Entra-verificatie.

-H workstation_name

De naam van een werkstation. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDWORKSTATION. De naam van het werkstation wordt vermeld in de kolom hostname van de sys.sysprocesses catalogusweergave en kan worden geretourneerd met behulp van de opgeslagen procedure sp_who. Als deze optie niet is opgegeven, is de standaardwaarde de naam van de huidige computer. Deze naam kan worden gebruikt om verschillende sqlcmd sessies te identificeren.

-j

Hiermee worden onbewerkte foutberichten op het scherm afgedrukt.

-K applicatie_intentie

Declareert het workloadtype van de toepassing bij het maken van verbinding met een server. De enige ondersteunde waarde is ReadOnly. Als -K niet is opgegeven, biedt sqlcmd- geen ondersteuning voor connectiviteit met een secundaire replica in een beschikbaarheidsgroep. Zie voor meer informatie Actieve secundaire replica's: leesbare secundaire replica (Always On-beschikbaarheidsgroepen).

-M multisubnet_failover

Geef altijd -M op wanneer u verbinding maakt met de listener voor de beschikbaarheidsgroep van een SQL Server-beschikbaarheidsgroep of een exemplaar van een SQL Server-failovercluster. -M biedt een snellere detectie van en verbinding met de (momenteel) actieve server. Als -M niet is opgegeven, is -M uitgeschakeld. Voor meer informatie over listeners, clientconnectiviteit, toepassingsfailover, maken en configureren van beschikbaarheidsgroepen (SQL Server), failoverclustering en AlwaysOn-beschikbaarheidsgroepen (SQL Server)en actieve secundaire replica's: leesbare secundaire replica's (AlwaysOn-beschikbaarheidsgroepen).

-N

Deze optie wordt door de client gebruikt om een versleutelde verbinding aan te vragen.

Voor het hulpprogramma sqlcmd (Go) gebruikt -N nu een tekenreekswaarde die een van true, falseof disable kan zijn om de versleutelingskeuze op te geven. (default is hetzelfde als het weglaten van de parameter):

  • Als -N en -C niet worden opgegeven, onderhandelt sqlcmd over verificatie met de server zonder het servercertificaat te valideren.
  • Als -N is opgegeven, maar -C niet is, moet sqlcmd het servercertificaat valideren. Een false waarde voor versleuteling kan nog steeds leiden tot de versleuteling van het aanmeldingspakket.
  • Als er zowel -N als -C worden opgegeven, gebruikt sqlcmd hun waarden voor versleutelingsonderhandeling.

-P wachtwoord

Een door de gebruiker opgegeven wachtwoord. Wachtwoorden zijn hoofdlettergevoelig. Als de optie -U wordt gebruikt en de optie -P niet wordt gebruikt en de omgevingsvariabele SQLCMDPASSWORD niet is ingesteld, sqlcmd- de gebruiker om een wachtwoord vraagt. We raden het gebruik van een null-wachtwoord (leeg) niet aan, maar u kunt het null-wachtwoord opgeven met behulp van een paar aaneengesloten dubbele aanhalingstekens voor de parameterwaarde ("").

Belangrijk

Het gebruik van -P moet als onveilig worden beschouwd. Vermijd het geven van het wachtwoord via de opdrachtregel. U kunt ook de omgevingsvariabele SQLCMDPASSWORD gebruiken of het wachtwoord interactief invoeren door de optie -P weg te laten.

We raden u aan een sterk wachtwoord te gebruiken.

De wachtwoordprompt wordt weergegeven door deze als volgt naar de console af te drukken: Password:

Gebruikersinvoer is verborgen. Dit betekent dat er niets wordt weergegeven en dat de cursor op positie blijft.

Met de omgevingsvariabele SQLCMDPASSWORD kunt u een standaardwachtwoord instellen voor de huidige sessie. Wachtwoorden hoeven daarom niet in batchbestanden in code te worden vastgelegd. In het volgende voorbeeld wordt eerst de variabele SQLCMDPASSWORD ingesteld bij de opdrachtprompt en wordt vervolgens het hulpprogramma sqlcmd geopend.

Typ bij de opdrachtprompt:

SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd

Als de combinatie van gebruikersnaam en wachtwoord onjuist is, wordt er een foutbericht gegenereerd.

Notitie

De omgevingsvariabele OSQLPASSWORD is bewaard voor achterwaartse compatibiliteit. De omgevingsvariabele SQLCMDPASSWORD heeft voorrang op de omgevingsvariabele OSQLPASSWORD. Dit betekent dat sqlcmd en osql- naast elkaar kunnen worden gebruikt zonder interferentie. Oude scripts blijven werken.

Als de optie -P wordt gebruikt met de optie -E, wordt er een foutbericht gegenereerd.

Als de optie -P wordt gevolgd door meer dan één argument, wordt er een foutbericht gegenereerd en wordt het programma afgesloten.

Een wachtwoord met speciale tekens kan een foutbericht genereren. U moet speciale tekens ontsnappen wanneer u -Pgebruikt of in plaats daarvan de omgevingsvariabele SQLCMDPASSWORD gebruiken.

-S [protocol:]server[\instance_name][,poort]

Geeft het exemplaar van SQL Server aan waarmee verbinding moet worden gemaakt. Hiermee wordt de sqlcmd scriptvariabele SQLCMDSERVERingesteld.

Geef server_name op om verbinding te maken met het standaardexemplaren van SQL Server op die servercomputer. Geef server_name[\instance_name] op om verbinding te maken met een benoemd exemplaar van SQL Server op die servercomputer. Als er geen servercomputer is opgegeven, maakt sqlcmd- verbinding met het standaardexemplaren van SQL Server op de lokale computer. Deze optie is vereist wanneer u sqlcmd- uitvoert vanaf een externe computer in het netwerk.

protocol kan tcp (TCP/IP), lpc (gedeeld geheugen) of np (named pipes) zijn.

Als u geen server_name[\instance_name] opgeeft wanneer u sqlcmdstart, controleert en gebruikt SQL Server de omgevingsvariabele SQLCMDSERVER.

Notitie

De omgevingsvariabele OSQLSERVER is bewaard voor achterwaartse compatibiliteit. De omgevingsvariabele SQLCMDSERVER heeft voorrang op de omgevingsvariabele OSQLSERVER. Dit betekent dat sqlcmd en osql- naast elkaar kunnen worden gebruikt zonder interferentie. Oude scripts blijven werken.

-U login_id

De aanmeldingsnaam of de gebruikersnaam van de ingesloten database. Voor ingesloten databasegebruikers moet u de optie databasenaam (-d) opgeven.

Notitie

De omgevingsvariabele OSQLUSER is bewaard voor achterwaartse compatibiliteit. De omgevingsvariabele SQLCMDUSER heeft voorrang op de omgevingsvariabele OSQLUSER. Dit betekent dat sqlcmd en osql- naast elkaar kunnen worden gebruikt zonder interferentie. Oude scripts blijven werken.

Als u de optie -U of de optie -P niet opgeeft, probeert sqlcmd- verbinding te maken met behulp van de Windows-verificatiemodus. Verificatie is gebaseerd op het Windows-account van de gebruiker die sqlcmduitvoert.

Als de optie -U wordt gebruikt met de optie -E (verderop in dit artikel beschreven), wordt er een foutbericht gegenereerd. Als de optie -U wordt gevolgd door meer dan één argument, wordt er een foutbericht gegenereerd en wordt het programma afgesloten.

-z nieuw_wachtwoord

Het wachtwoord wijzigen:

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

-Z nieuw_wachtwoord

Het wachtwoord wijzigen en afsluiten:

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

Invoer-/uitvoeropties

-f codepagina | i:codepagina[,o:codepagina] | o:codepagina[,i:codepagina]

Hiermee geeft u de pagina's met invoer- en uitvoercode op. Het codepaginanummer is een numerieke waarde waarmee een geïnstalleerde Windows-codepagina wordt opgegeven.

Regels voor conversie van codepagina's:

  • Als er geen codepagina's zijn opgegeven, sqlcmd de huidige codepagina gebruikt voor zowel invoer- als uitvoerbestanden, tenzij het invoerbestand een Unicode-bestand is, in dat geval is er geen conversie vereist.

  • sqlcmd- herkent automatisch zowel big-endian- als little-endian Unicode-invoerbestanden. Als de optie -u is opgegeven, is de uitvoer altijd Little Endian Unicode.

  • Als er geen uitvoerbestand is opgegeven, is de pagina met de uitvoercode de consolecodepagina. Met deze methode kan de uitvoer correct worden weergegeven op de console.

  • Er wordt uitgegaan dat meerdere invoerbestanden van dezelfde codepagina zijn. Unicode- en niet-Unicode-invoerbestanden kunnen worden gemengd.

Voer chcp in bij de opdrachtprompt om de codepagina van cmd.exete controleren.

-i input_file[,input_file2...]

Identificeert het bestand dat een batch Transact-SQL instructies of opgeslagen procedures bevat. Er kunnen meerdere bestanden worden opgegeven die in volgorde worden gelezen en verwerkt. Gebruik geen spaties tussen bestandsnamen. sqlcmd controleert eerst of alle opgegeven bestanden bestaan. Als een of meer bestanden niet bestaan, sqlcmd wordt afgesloten. De -i en de -Q/-q opties sluiten elkaar wederzijds uit.

Notitie

Als u de optie -i gebruikt, gevolgd door een of meer extra parameters, moet u een spatie tussen de parameter en de waarde gebruiken. Dit is een bekend probleem in sqlcmd (Go).

Padvoorbeelden:

-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"

Bestandspaden die spaties bevatten, moeten tussen aanhalingstekens worden geplaatst.

Deze optie kan meerdere keren worden gebruikt:

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o output_file

Identificeert het bestand dat uitvoer ontvangt van sqlcmd-.

Als -u is opgegeven, wordt de output_file opgeslagen in Unicode-formaat. Als de bestandsnaam niet geldig is, wordt er een foutbericht gegenereerd en sqlcmd afgesloten. sqlcmd- biedt geen ondersteuning voor gelijktijdig schrijven van meerdere sqlcmd processen naar hetzelfde bestand. De bestandsuitvoer is beschadigd of onjuist. De optie -f is ook relevant voor bestandsindelingen. Dit bestand wordt gemaakt als het niet bestaat. Een bestand met dezelfde naam van een eerdere sqlcmd sessie wordt overschreven. Het bestand dat hier is opgegeven, is niet het stdout-bestand. Als er een stdout-bestand is opgegeven, wordt dit bestand niet gebruikt.

Padvoorbeelden:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

Bestandspaden die spaties bevatten, moeten tussen aanhalingstekens worden geplaatst.

-r[0 | 1]

Hiermee wordt de uitvoer van het foutbericht omgeleid naar het scherm (stderr). Als u geen parameter opgeeft of als u 0opgeeft, worden alleen foutberichten met een ernstniveau van 11 of hoger omgeleid. Als u 1opgeeft, wordt alle foutberichtuitvoer, inclusief PRINT, omgeleid. Deze optie heeft geen effect als u -ogebruikt. Standaard worden berichten verzonden naar stdout.

Notitie

Voor het hulpprogramma sqlcmd (Go) vereist -r een 0 of 1 argument.

-R

Alleen van toepassing op: ODBC-sqlcmd-.

Veroorzaakt sqlcmd- om numerieke, valuta-, datum- en tijdkolommen te lokaliseren die zijn opgehaald uit SQL Server op basis van de landinstelling van de client. Deze kolommen worden standaard weergegeven met behulp van de landinstellingen van de server.

-u

Hiermee geeft u op dat output_file is opgeslagen in Unicode-indeling, ongeacht de indeling van input_file.

Notitie

Voor het hulpprogramma sqlcmd (Go) bevat het gegenereerde Unicode-uitvoerbestand de UTF-16 Little-Endian Byte-ordemarkering (BOM) dat eraan is toegevoegd.

Opties voor query-uitvoering

-e

Schrijft invoerscripts naar het standaarduitvoerapparaat (stdout).

-Ik

Alleen van toepassing op: ODBC-sqlcmd-.

Hiermee stelt u de SET QUOTED_IDENTIFIER verbindingsoptie in op ON. Deze is standaard ingesteld op OFF. Zie set QUOTED_IDENTIFIER (Transact-SQL)voor meer informatie.

Notitie

Schakel het gedrag van het aangehaalde identificator uit in het hulpprogramma sqlcmd (Go) door SET QUOTED IDENTIFIER OFF aan uw scripts toe te voegen.

-q "cmdlinequery"

Voert een query uit wanneer sqlcmd- wordt gestart, maar sluit sqlcmd niet af wanneer de query is uitgevoerd. Query's met meerdere puntkomma's kunnen worden uitgevoerd. Gebruik aanhalingstekens rond de query, zoals wordt weergegeven in het volgende voorbeeld.

Typ bij de opdrachtprompt:

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

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

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

Belangrijk

Gebruik de GO terminator niet in de query.

Als -b samen met deze optie is opgegeven, stopt sqlcmd bij een fout. -b wordt elders in dit artikel beschreven.

-Q "cmdlinequery"

Voert een query uit wanneer sqlcmd wordt gestart en stopt dan onmiddellijk sqlcmd. Query's met meerdere puntkomma's kunnen worden uitgevoerd.

Gebruik aanhalingstekens rond de query, zoals wordt weergegeven in het volgende voorbeeld.

Typ bij de opdrachtprompt:

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

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

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

Belangrijk

Gebruik de GO terminator niet in de query.

Als -b samen met deze optie is opgegeven, wordt sqlcmd afgesloten bij een fout. -b wordt elders in dit artikel beschreven.

-t query_timeout

Hiermee geeft u het aantal seconden op voordat er een time-out optreedt voor een opdracht (of Transact-SQL instructie). Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDSTATTIMEOUT. Als er geen query_timeout-waarde is opgegeven, treedt er geen time-out op voor de opdracht. De query_timeout moet een getal tussen 1 en 65534zijn. Als de opgegeven waarde niet numeriek is of niet in dat bereik valt, genereert sqlcmd- een foutbericht.

Notitie

De werkelijke time-outwaarde kan variëren van de opgegeven query_timeout waarde met enkele seconden.

-v var = waarde [ var = waarde... ]

Hiermee maakt u een sqlcmd scriptvariabele die kan worden gebruikt in een sqlcmd script. Plaats de waarde tussen aanhalingstekens als de waarde spaties bevat. U kunt meerdere <var>="<value>" waarden opgeven. Als er fouten optreden in een van de opgegeven waarden, genereert sqlcmd- een foutbericht en wordt vervolgens afgesloten.

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

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

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

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

-x

Zorgt ervoor dat sqlcmd- scriptvariabelen negeert. Deze parameter is handig wanneer een script veel INSERT instructies bevat die mogelijk tekenreeksen bevatten met dezelfde indeling als reguliere variabelen, zoals $(<variable_name>).

Opmaakopties

-h headers

Hiermee geeft u het aantal rijen op dat moet worden afgedrukt tussen de kolomkoppen. De standaardinstelling is om koppen één keer af te drukken voor elke set queryresultaten. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDHEADERS. Gebruik -1 om op te geven dat kopteksten niet worden afgedrukt. Elke waarde die niet geldig is, zorgt ervoor dat sqlcmd een foutbericht genereert en vervolgens afsluit.

-k [1 | 2]

Hiermee verwijdert u alle besturingstekens, zoals tabs en nieuwe regeltekens uit de uitvoer. Met deze parameter blijft de kolomopmaak behouden wanneer gegevens worden geretourneerd.

  • -k verwijdert besturingstekens.
  • -k1 vervangt elk besturingselementteken door een spatie.
  • -k2 vervangt opeenvolgende besturingstekens door één spatie.

-s kolom_scheidingsteken

U geeft het scheidingsteken voor kolommen op. De standaardwaarde is een lege ruimte. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDCOLSEP. Als u tekens wilt gebruiken die een speciale betekenis hebben voor het besturingssysteem, zoals het ampersand (&) of puntkomma (;), plaatst u het teken tussen aanhalingstekens ("). Het kolomscheidingsteken kan een 8-bits teken zijn.

-w scherm_breedte

Hiermee specificeert u de schermbreedte voor uitvoer. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDCOLWIDTH. De kolombreedte moet een getal groter zijn dan 8 en kleiner dan 65536. Als de opgegeven kolombreedte niet in dat bereik valt, genereert sqlcmd een foutbericht. De standaardbreedte is 80 tekens. Wanneer een uitvoerlijn de opgegeven kolombreedte overschrijdt, loopt deze terug op de volgende regel.

-W

Met deze optie worden volgspaties uit een kolom verwijderd. Gebruik deze optie samen met de optie -s bij het voorbereiden van gegevens die naar een andere toepassing moeten worden geëxporteerd. Kan niet worden gebruikt met de -y- of -Y-opties.

-y variable_length_type_display_width

Hiermee stelt u de sqlcmd scripting-variabele SQLCMDMAXVARTYPEWIDTHin. De standaardwaarde is 256. Hiermee wordt het aantal tekens beperkt dat wordt geretourneerd voor de gegevenstypen met een grote variabele lengte:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml--
  • door de gebruiker gedefinieerde gegevenstypen (UDT's)
  • tekst
  • ntext
  • afbeelding

UDT's kunnen een vaste lengte hebben, afhankelijk van de implementatie. Als deze lengte van een UDT met een vaste lengte korter is dan display_width, wordt de waarde van de geretourneerde UDT niet beïnvloed. Als de lengte echter groter is dan display_width, wordt de uitvoer ingekort.

Voorzichtigheid

Gebruik de optie -y 0 uiterst voorzichtig, omdat dit aanzienlijke prestatieproblemen kan veroorzaken op zowel de server als het netwerk, afhankelijk van de grootte van de geretourneerde gegevens.

-Y-fixed_length_type_display_width

Hiermee stelt u de sqlcmd scriptvariabele in SQLCMDMAXFIXEDTYPEWIDTH. De standaardwaarde is 0 (onbeperkt). Hiermee beperkt u het aantal tekens dat wordt geretourneerd voor de volgende gegevenstypen:

  • char(n), waarbij 1 <= n<= 8000
  • nchar(n), waarbij 1 <= n<= 4000
  • varchar(n), waarbij 1 <= n<= 8000
  • nvarchar(n), waarbij 1 <= n<= 4000
  • varbinary(n), waarbij 1 <= n<= 4000
  • sql_variant

Opties voor foutrapportage

-b

Hiermee geeft u op dat sqlcmd afsluit en een DOS ERRORLEVEL waarde retourneert wanneer er een fout optreedt. De waarde die naar de ERRORLEVEL variabele wordt geretourneerd, wordt 1 wanneer het SQL Server-foutbericht een ernstniveau heeft dat groter is dan 10; anders wordt de geretourneerde waarde 0. Als de optie -V naast -bis ingesteld, meldt sqlcmd- geen fout als het ernstniveau lager is dan de waarden die zijn ingesteld met -V. Batchbestanden met opdrachtprompt kunnen de waarde van ERRORLEVEL testen en de fout op de juiste manier afhandelen. sqlcmd- rapporteert geen fouten voor ernstniveau 10 (informatieve berichten).

Als het sqlcmd-script een onjuiste opmerking, een syntaxisfout bevat of als er een scriptvariabele ontbreekt, is de geretourneerde ERRORLEVEL1.

-m foutenniveau

Hiermee bepaalt u welke foutberichten naar stdoutworden verzonden. Berichten met een ernstniveau groter dan of gelijk aan dit niveau worden verzonden. Wanneer deze waarde is ingesteld op -1, worden alle berichten, inclusief informatieve berichten, verzonden. Spaties zijn niet toegestaan tussen de -m en -1. -m-1 is bijvoorbeeld geldig en -m -1 niet.

Met deze optie wordt ook de sqlcmd scriptvariabele SQLCMDERRORLEVELingesteld. Deze variabele heeft een standaardwaarde van 0.

-V error_severity_level

Hiermee bepaalt u het ernstniveau dat wordt gebruikt om de ERRORLEVEL variabele in te stellen. Foutberichten met een ernstniveau dat groter is dan of gelijk aan deze ingestelde waarde ERRORLEVEL. Waarden die kleiner zijn dan 0, worden gerapporteerd als 0. Batch- en CMD-bestanden kunnen worden gebruikt om de waarde van de ERRORLEVEL variabele te testen.

Diverse opties

-a packet_size

Vraagt een pakket van een andere grootte aan. Met deze optie stelt u de sqlcmd scriptvariabele in SQLCMDPACKETSIZE. packet_size moet een waarde tussen 512 en 32767zijn. De standaardwaarde is 4096. Een grotere pakketgrootte kan de prestaties verbeteren voor het uitvoeren van scripts met veel Transact-SQL instructies tussen GO opdrachten. U kunt een grotere pakketgrootte aanvragen. Als de aanvraag echter wordt geweigerd, gebruikt sqlcmd- de standaardserver voor pakketgrootte.

-c batch_beëindiger

Specificeert het batch-eindteken. Opdrachten worden standaard beëindigd en naar SQL Server verzonden door het woord GO zelf op een regel te typen. Wanneer u de batcheindtekens opnieuw instelt, gebruikt u geen Transact-SQL gereserveerde trefwoorden of tekens met speciale betekenis voor het besturingssysteem, zelfs niet als ze worden voorafgegaan door een backslash.

-L[c]

Een lijst met de lokaal geconfigureerde servercomputers en de namen van de servercomputers die op het netwerk uitzenden. Deze parameter kan niet worden gebruikt in combinatie met andere parameters. Het maximum aantal servercomputers dat kan worden vermeld, is 3000. Als de serverlijst wordt afgekapt vanwege de grootte van de buffer, wordt er een waarschuwingsbericht weergegeven.

Notitie

Vanwege de aard van het uitzenden op netwerken, ontvangt sqlcmd- mogelijk geen tijdige reactie van alle servers. Daarom kan de lijst met geretourneerde servers variëren voor elke aanroep van deze optie.

Als de optionele parameter c is opgegeven, wordt de uitvoer weergegeven zonder de Servers: kopregel en wordt elke serverregel weergegeven zonder voorloopspaties. Deze presentatie wordt 'schone uitvoer' genoemd. Schone uitvoer verbetert de verwerkingsprestaties van scripttalen.

-p[1]

Hiermee worden prestatiestatistieken afgedrukt voor elke resultatenset. De volgende weergave is een voorbeeld van de indeling voor prestatiestatistieken:

Network packet size (bytes): n

x xact[s]:

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

Waar:

  • x = aantal transacties dat door SQL Server wordt verwerkt.
  • t1 = Totale tijd voor alle transacties.
  • t2 = Gemiddelde tijd voor één transactie.
  • t3 = Gemiddeld aantal transacties per seconde.

Alle tijden zijn in milliseconden.

Als de optionele parameter 1 is opgegeven, heeft de uitvoerindeling van de statistieken een door dubbele punt gescheiden indeling die eenvoudig kan worden geïmporteerd in een spreadsheet of door een script kan worden verwerkt.

Als de optionele parameter een andere waarde is dan 1, wordt er een fout gegenereerd en wordt sqlcmd afgesloten.

-X[1]

Hiermee schakelt u opdrachten uit waarmee systeembeveiliging mogelijk wordt aangetast wanneer sqlcmd- wordt uitgevoerd vanuit een batchbestand. De uitgeschakelde opdrachten worden nog steeds herkend; sqlcmd een waarschuwingsbericht geeft en doorgaat. Als de optionele parameter 1 is opgegeven, genereert sqlcmd een foutbericht en wordt vervolgens afgesloten. De volgende opdrachten worden uitgeschakeld wanneer de optie -X wordt gebruikt:

  • ED
  • !! opdracht

Als de optie -X is opgegeven, voorkomt u dat omgevingsvariabelen worden doorgegeven aan sqlcmd-. Het voorkomt ook dat het opstartscript dat is opgegeven met behulp van de SQLCMDINI scriptvariabele, wordt uitgevoerd. Zie sqlcmd - Gebruiken met scriptvariabelenvoor meer informatie over sqlcmd scriptvariabelen.

-?

Geeft de versie van sqlcmd en een syntaxisoverzicht weer van sqlcmd opties.

Notitie

Voer in macOS in plaats daarvan sqlcmd '-?' (met aanhalingstekens) uit.

Opmerkingen

Opties hoeven niet te worden gebruikt in de volgorde die wordt weergegeven in de syntaxissectie.

Notitie

Als u de optie -i gebruikt, gevolgd door een of meer extra parameters, moet u een spatie tussen de parameter en de waarde gebruiken. Dit is een bekend probleem in sqlcmd (Go).

Wanneer er meerdere resultaten worden geretourneerd, sqlcmd een lege regel tussen elke resultatenset in een batch afdrukken. Bovendien wordt het <x> rows affected bericht niet weergegeven wanneer het niet van toepassing is op de uitgevoerde instructie.

Als u sqlcmd- interactief wilt gebruiken, typt u sqlcmd bij de opdrachtprompt met een of meer van de opties die eerder in dit artikel zijn beschreven. Zie Het sqlcmd-hulpprogramma gebruiken voor meer informatie

Notitie

De opties -l, -Q, -Z of -i veroorzaken dat sqlcmd- na uitvoering afsluit.

De totale lengte van de sqlcmd opdrachtregel in de opdrachtomgeving (bijvoorbeeld cmd.exe of bash), inclusief alle argumenten en uitgebreide variabelen, wordt bepaald door het onderliggende besturingssysteem.

Variabele prioriteit (laag tot hoog)

  1. Omgevingsvariabelen op systeemniveau
  2. Omgevingsvariabelen op gebruikersniveau
  3. Opdrachtprompt (SET X=Y) ingesteld voordat sqlcmd wordt uitgevoerd
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Notitie

Als u de omgevingsvariabelen wilt weergeven, opent u in ConfiguratieschermSystemen selecteert u vervolgens het tabblad Geavanceerd.

sqlcmd-scriptvariabelen

Veranderlijk Gerelateerde optie R/W Verstek
SQLCMDUSER -U R ""
SQLCMDPASSWORD -P -- ""
SQLCMDSERVER -S R "DefaultLocalInstance"
SQLCMDWORKSTATION -H R Computernaam
SQLCMDDBNAME -d R ""
SQLCMDLOGINTIMEOUT -l R/W "8" (seconden)
SQLCMDSTATTIMEOUT -t R/W "0" = wacht voor onbepaalde tijd
SQLCMDHEADERS -h R/W 0
SQLCMDCOLSEP -s R/W " "
SQLCMDCOLWIDTH -w R/W 0
SQLCMDPACKETSIZE -a R "4096"
SQLCMDERRORLEVEL -m R/W 0
SQLCMDMAXVARTYPEWIDTH -y R/W "256"
SQLCMDMAXFIXEDTYPEWIDTH -Y R/W "0" = onbeperkt
SQLCMDEDITOR R/W edit.com
SQLCMDINI R ""
SQLCMDUSEAAD -G R/W ""

SQLCMDUSER, SQLCMDPASSWORDen SQLCMDSERVER worden ingesteld wanneer :Connect wordt gebruikt.

R geeft aan dat de waarde slechts één keer kan worden ingesteld tijdens de initialisatie van het programma.

R/W geeft aan dat de waarde kan worden gewijzigd met behulp van de opdracht :setvar en volgende opdrachten worden beïnvloed door de nieuwe waarde.

sqlcmd-opdrachten

Naast Transact-SQL instructies in sqlcmdzijn ook de volgende opdrachten beschikbaar:

GO [ aantal ]

:List

[:]RESET

:Error

[:]ED

:Out

[:]!!

:Perftrace

[:]QUIT

:Connect

[:]EXIT

:On Error

:r

:Help

:ServerList

:XML [ ON | OFF ]

:Setvar

:Listvar

Let op het volgende wanneer u sqlcmd opdrachten gebruikt:

  • Alle sqlcmd opdrachten, met uitzondering van GO, moeten worden voorafgegaan door een dubbele punt (:).

    Belangrijk

    Om de compatibiliteit met bestaande osql-scripts te behouden, worden sommige opdrachten herkend zonder de dubbele punt, zoals aangegeven door de :.

  • sqlcmd opdrachten worden alleen herkend als deze worden weergegeven aan het begin van een regel.

  • Alle sqlcmd opdrachten zijn niet hoofdlettergevoelig.

  • Elke opdracht moet op een afzonderlijke regel staan. Een opdracht kan niet worden gevolgd door een Transact-SQL instructie of een andere opdracht.

  • Opdrachten worden onmiddellijk uitgevoerd. Ze worden niet zoals Transact-SQL-instructies in de uitvoeringsbuffer geplaatst.

Bewerkingsopdrachten

[:]ED

Hiermee start u de teksteditor. Deze editor kan worden gebruikt om de huidige Transact-SQL batch of de laatst uitgevoerde batch te bewerken. Als u de laatst uitgevoerde batch wilt bewerken, moet de opdracht ED direct worden getypt nadat de laatste batch de uitvoering heeft voltooid.

De teksteditor wordt gedefinieerd door de omgevingsvariabele SQLCMDEDITOR. De standaardeditor is Edit. Als u de editor wilt wijzigen, stelt u de omgevingsvariabele SQLCMDEDITOR in. Als u bijvoorbeeld de editor wilt instellen op Microsoft Kladblok, typt u bij de opdrachtprompt:

SET SQLCMDEDITOR=notepad

[:]TERUGSTELLEN

Leegt de verklaring cache.

:Lijst

Hiermee wordt de inhoud van de verklaringscache weergegeven.

Variabelen

:Setvar <var> [ "waarde" ]

Definieert sqlcmd scriptvariabelen. Scriptvariabelen hebben de volgende indeling: $(VARNAME).

Variabelenamen zijn niet hoofdlettergevoelig.

Scriptvariabelen kunnen op de volgende manieren worden ingesteld:

  • Impliciet met behulp van een opdrachtregeloptie. Met de optie -l wordt bijvoorbeeld de variabele SQLCMDLOGINTIMEOUTsqlcmd ingesteld.

  • Expliciet met behulp van de opdracht :Setvar.

  • Door een omgevingsvariabele te definiëren voordat u sqlcmd-uitvoert.

Notitie

De optie -X voorkomt dat omgevingsvariabelen worden doorgegeven aan sqlcmd-.

Als een variabele die is gedefinieerd met behulp van :Setvar en een omgevingsvariabele dezelfde naam heeft, heeft de variabele die is gedefinieerd met behulp van :Setvar voorrang.

Namen van variabelen mogen geen spatietekens bevatten.

Namen van variabelen kunnen niet hetzelfde formulier hebben als een variabeleexpressie, zoals $(var).

Als de tekenreekswaarde van de scriptvariabele lege spaties bevat, plaatst u de waarde tussen aanhalingstekens. Als er geen waarde voor een scriptvariabele is opgegeven, wordt de scriptvariabele verwijderd.

:Listvar

Geeft een lijst weer van de scriptvariabelen die momenteel zijn ingesteld.

Notitie

Alleen scriptvariabelen die zijn ingesteld door sqlcmd-en variabelen die zijn ingesteld met behulp van de opdracht :Setvar worden weergegeven.

Uitvoeropdrachten

:Fout <bestandsnaam> | STDERR | STDOUT

Alle foutuitvoer omleiden naar het bestand dat is opgegeven door bestandsnaam, naar stderr of naar stdout. De opdracht :Error kan meerdere keren in een script worden weergegeven. Standaard wordt foutuitvoer verzonden naar stderr.

  • bestandsnaam

    Hiermee maakt en opent u een bestand dat de uitvoer ontvangt. Als het bestand al bestaat, wordt het afgekapt tot nul bytes. Als het bestand niet beschikbaar is vanwege machtigingen of andere redenen, wordt de uitvoer niet overgeschakeld en verzonden naar de laatst opgegeven of standaardbestemming.

  • STDERR

    Hiermee schakelt u foutuitvoer naar de stderr stream. Als dit is omgeleid, ontvangt het doel waarheen de stream is omgeleid de foutuitvoer.

  • STDOUT

    Hiermee schakelt u foutuitvoer naar de stdout stream. Als dit is omgeleid, ontvangt het doel waarnaar de stream is omgeleid de foutuitvoer.

:Out <bestandsnaam> | STDERR | STDOUT

Hiermee worden alle queryresultaten omgeleid naar het bestand dat is opgegeven door bestandsnaam, naar stderr of naar stdout. Standaard wordt uitvoer verzonden naar stdout. Als het bestand al bestaat, wordt het afgekapt tot nul bytes. De opdracht :Out kan meerdere keren in een script worden weergegeven.

:Perftrace <bestandsnaam> | STDERR | STDOUT

Hiermee worden alle prestatietraceringsgegevens gemaakt en omgeleid naar het bestand dat is opgegeven door bestandsnaam, naar stderr of naar stdout. Standaard wordt uitvoer van prestatietracering verzonden naar stdout. Als het bestand al bestaat, wordt het afgekapt tot nul bytes. De opdracht :Perftrace kan meerdere keren in een script worden weergegeven.

Opdrachten voor uitvoeringsbeheer

:Bij foutmelding [ afsluiten | negeren ]

Hiermee stelt u de actie in die moet worden uitgevoerd wanneer er een fout optreedt tijdens het uitvoeren van een script of batch.

Wanneer de optie exit wordt gebruikt, wordt sqlcmd afgesloten met de juiste foutwaarde.

Wanneer de optie ignore wordt gebruikt, negeert sqlcmd de fout en gaat verder met het uitvoeren van de batch of het script. Standaard wordt een foutbericht afgedrukt.

[:]VERLATEN

Zorgt ervoor dat sqlcmd- wordt afgesloten.

[:]EXIT [ ( instructie ) ]

Hiermee kunt u het resultaat van een SELECT-instructie als retourwaarde gebruiken in de sqlcmd. Als de numerieke waarde is, wordt de eerste kolom van de laatste resultaatrij geconverteerd naar een geheel getal van 4 bytes (lang). MS-DOS, Linux en macOS geven de lage byte door aan het bovenliggende proces- of besturingssysteemfoutniveau. Windows 2000 en latere versies geven het gehele getal van 4 bytes door. De syntaxis is :EXIT(query).

Bijvoorbeeld:

:EXIT(SELECT @@ROWCOUNT)

U kunt ook de parameter :EXIT opnemen als onderdeel van een batchbestand. Typ bijvoorbeeld bij de opdrachtprompt:

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

Het hulpprogramma sqlcmd verzendt alles tussen de haakjes (()) naar de server. Als een systeem opgeslagen procedure een set selecteert en een waarde retourneert, wordt alleen de selectie geretourneerd. De :EXIT() instructie met niets tussen de haakjes voert alles uit voordat deze in de batch wordt uitgevoerd en sluit vervolgens af zonder retourwaarde.

Wanneer een onjuiste query is opgegeven, sqlcmd wordt afgesloten zonder een retourwaarde.

Hier volgt een lijst met EXIT formaten:

  • :EXIT

    De batch wordt niet uitgevoerd en wordt vervolgens onmiddellijk afgesloten en retourneert geen waarde.

  • :EXIT( )

    Voert de batch uit en beëindigt en geeft geen waarde terug.

  • :EXIT(query)

    Hiermee wordt de batch uitgevoerd die de query bevat en wordt vervolgens afgesloten nadat de resultaten van de query zijn geretourneerd.

Als RAISERROR wordt gebruikt in een sqlcmd script en er een status van 127 wordt gegenereerd, wordt sqlcmd afgesloten en wordt de bericht-id teruggezet naar de client. Bijvoorbeeld:

RAISERROR(50001, 10, 127)

Deze fout zorgt ervoor dat het sqlcmd--script wordt beëindigd en de bericht-id 50001 naar de client wordt geretourneerd.

De retourwaarden -1 aan -99 zijn gereserveerd door SQL Server en sqlcmd- definieert de volgende extra retourwaarden:

Retourwaarde Beschrijving
-100 Er is een fout opgetreden voordat u een retourwaarde selecteert.
-101 Er zijn geen rijen gevonden bij het selecteren van de retourwaarde.
-102 Er is een conversiefout opgetreden bij het selecteren van de retourwaarde.

GO [aantal]

GO geeft zowel het einde van een batch aan als de uitvoering van eventuele Transact-SQL-instructies in de cache. De batch wordt meerdere keren uitgevoerd als afzonderlijke batches. U kunt een variabele niet meer dan één keer declareren in één batch.

Diverse opdrachten

:r <bestandsnaam>

Parseert extra Transact-SQL-instructies en sqlcmd-opdrachten uit het door bestandsnaam opgegeven bestand in de instructiecache. bestandsnaam wordt gelezen ten opzichte van de opstartmap waarin sqlcmd- is uitgevoerd.

Als het bestand Transact-SQL-instructies bevat die niet worden gevolgd door GO, moet u GO invoeren op de regel die op :rvolgt.

Het bestand wordt gelezen en uitgevoerd nadat er een batcheindteken is aangetroffen. U kunt meerdere :r opdrachten uitgeven. Het bestand kan een sqlcmd opdracht bevatten, inclusief de batcheindtekening GO.

Notitie

Het aantal regels dat in de interactieve modus wordt weergegeven, zal met één worden verhoogd voor elk :r-commando dat wordt gegenereerd. De opdracht :r wordt weergegeven in de uitvoer van de lijstopdracht.

:ServerList

Een lijst met de lokaal geconfigureerde servers en de namen van de servers die op het netwerk worden uitgezonden.

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]]

Maakt verbinding met een exemplaar van SQL Server. Sluit ook de huidige verbinding.

Timeoutopties:

Waarde Gedrag
0 Wacht voor altijd
n>0 Wacht gedurende en seconden

De SQLCMDSERVER scriptvariabele weerspiegelt de huidige actieve verbinding.

Als time-out niet is opgegeven, is de waarde van de variabele SQLCMDLOGINTIMEOUT de standaardwaarde.

Als alleen user_name is opgegeven (als optie of als omgevingsvariabele), wordt de gebruiker gevraagd een wachtwoord in te voeren. Gebruikers worden niet gevraagd of de omgevingsvariabelen SQLCMDUSER of SQLCMDPASSWORD zijn ingesteld. Als u geen opties of omgevingsvariabelen opgeeft, wordt de Windows-verificatiemodus gebruikt om u aan te melden. Als u bijvoorbeeld verbinding wilt maken met een exemplaar, instance1, van SQL Server, myserver, met behulp van geïntegreerde beveiliging, gebruikt u de volgende opdracht:

:connect myserver\instance1

Als u verbinding wilt maken met het standaardexemplaren van myserver met behulp van scriptvariabelen, gebruikt u de volgende instellingen:

:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)

[:]!! opdracht

Hiermee worden besturingssysteemopdrachten uitgevoerd. Als u een besturingssysteemopdracht wilt uitvoeren, start u een regel met twee uitroeptekens (!!) gevolgd door de opdracht van het besturingssysteem. Bijvoorbeeld:

:!! dir

Notitie

De opdracht wordt uitgevoerd op de computer waarop sqlcmd wordt uitgevoerd.

:XML [ AAN | UIT ]

Zie XML Output Format en JSON Output Format in dit artikel voor meer informatie.

:Hulp

Een lijst met sqlcmd opdrachten, samen met een korte beschrijving van elke opdracht.

sqlcmd-bestandsnamen

sqlcmd invoerbestanden kunnen worden opgegeven met de optie -i of de opdracht :r. Uitvoerbestanden kunnen worden opgegeven met de optie -o of de :Error, :Out en :Perftrace opdrachten. Hier volgen enkele richtlijnen voor het werken met deze bestanden:

  • :Error, :Out en :Perftrace moeten afzonderlijke bestandsnaam waarden gebruiken. Als dezelfde bestandsnaam wordt gebruikt, kunnen invoeren van de opdrachten worden vermengd.

  • Als een invoerbestand dat zich op een externe server bevindt, wordt aangeroepen vanuit sqlcmd op een lokale computer en het bestand een stationspad bevat, zoals :Out c:\OutputFile.txt, wordt het uitvoerbestand gemaakt op de lokale computer en niet op de externe server.

  • Geldige bestandspaden zijn: C:\<filename>, \\<Server>\<Share$>\<filename>en "C:\Some Folder\<file name>". Als er een spatie in het pad staat, gebruikt u aanhalingstekens.

  • Elke nieuwe sqlcmd sessie overschrijft bestaande bestanden met dezelfde namen.

Informatieve berichten

sqlcmd alle informatieberichten afdrukken die door de server worden verzonden. In het volgende voorbeeld wordt, nadat de Transact-SQL instructies zijn uitgevoerd, een informatief bericht afgedrukt.

Start sqlcmd. Typ bij de opdrachtprompt sqlcmd de query:

USE AdventureWorks2022;
GO

Wanneer u op Enterdrukt, wordt het volgende informatieve bericht afgedrukt:

Changed database context to 'AdventureWorks2022'.

Uitvoerformaat van Transact-SQL queries

sqlcmd drukt eerst een kolomkop af die de kolomnamen bevat die zijn opgegeven in de selectielijst. De kolomnamen worden gescheiden door het SQLCMDCOLSEP teken te gebruiken. Dit is standaard een spatie. Als de kolomnaam korter is dan de kolombreedte, wordt de uitvoer opgevuld met spaties tot aan de volgende kolom.

Deze regel wordt gevolgd door een scheidingsteken dat een reeks van streepjes is. In de volgende uitvoer ziet u een voorbeeld.

Start sqlcmd. Typ bij de opdrachtprompt sqlcmd de query:

USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Wanneer u op Enter-drukt, wordt de volgende resultatenset geretourneerd.

BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)

Hoewel de BusinessEntityID kolom slechts vier tekens breed is, is deze uitgebreid om de langere kolomnaam aan te passen. Standaard wordt de uitvoer beëindigd met 80 tekens. Deze breedte kan worden gewijzigd met behulp van de optie -w of door de SQLCMDCOLWIDTH scriptvariabele in te stellen.

XML-uitvoerindeling

XML-uitvoer die het resultaat is van een FOR XML-component wordt ongeformatteerd uitgevoerd in een continue stroom.

Wanneer u XML-uitvoer verwacht, gebruikt u de volgende opdracht: :XML ON.

Notitie

sqlcmd- geeft foutberichten in het gebruikelijke formaat. De foutberichten worden ook uitgegeven in de XML-tekststroom in XML-formaat. Als u :XML ONgebruikt, worden in sqlcmd- geen informatieve berichten weergegeven.

Als u de XML-modus wilt uitschakelen, gebruikt u de volgende opdracht: :XML OFF.

De opdracht GO mag niet voorkomen voordat de opdracht :XML OFF is uitgevoerd, omdat de opdracht :XML OFF sqlcmd weer naar rijgeoriënteerde uitvoer schakelt.

XML-gegevens (gestreamde) en rijsetgegevens kunnen niet worden gecombineerd. Als de opdracht :XML ON niet is uitgegeven voordat een Transact-SQL instructie wordt uitgevoerd die XML-streams uitvoert, wordt de uitvoer vervormd. Zodra de opdracht :XML ON is uitgegeven, kunt u geen Transact-SQL instructies uitvoeren die reguliere rijenets uitvoeren.

Notitie

De opdracht :XML biedt geen ondersteuning voor de instructie SET STATISTICS XML.

JSON-uitvoerindeling

Wanneer u JSON-uitvoer verwacht, gebruikt u de volgende opdracht: :XML ON. Anders bevat de uitvoer zowel de kolomnaam als de JSON-tekst. Deze uitvoer is geen geldige JSON.

Als u de XML-modus wilt uitschakelen, gebruikt u de volgende opdracht: :XML OFF.

Zie XML-uitvoerindeling in dit artikel voor meer informatie.

Microsoft Entra-verificatie gebruiken

Voorbeelden van Microsoft Entra-verificatie:

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30

aanbevolen procedures voor sqlcmd

Gebruik de volgende procedures om de beveiliging en efficiëntie te maximaliseren.

  • Geïntegreerde beveiliging gebruiken.

  • Gebruik -X[1] in geautomatiseerde omgevingen.

  • Beveilig invoer- en uitvoerbestanden met behulp van de juiste bestandssysteemmachtigingen.

  • Als u de prestaties wilt verbeteren, probeer dan zoveel mogelijk te doen in één sqlcmd sessie, in plaats van in een reeks sessies.

  • Stel time-outwaarden in voor batch- of queryuitvoering die hoger zijn dan u verwacht dat nodig is om de batch of query uit te voeren.

Gebruik de volgende procedures om de juistheid te maximaliseren:

  • Gebruik -V 16 om berichten van ernstniveau 16 te registreren. Ernst 16-berichten geven algemene fouten aan die door de gebruiker kunnen worden gecorrigeerd.

  • Controleer de afsluitcode en DOS ERRORLEVEL variabele nadat het proces is afgesloten. sqlcmd- retourneert 0 normaal, anders wordt de ERRORLEVEL ingesteld zoals geconfigureerd door -V. Met andere woorden, ERRORLEVEL zou niet dezelfde waarde moeten zijn als het foutnummer dat door SQL Server is gerapporteerd. Het foutnummer is een SQL Server-specifieke waarde die overeenkomt met de systeemfunctie @@ERROR. ERRORLEVEL is een sqlcmd-specifieke waarde om aan te geven waarom sqlcmd beëindigd en de waarde ervan wordt beïnvloed door -b opdrachtregelargument op te geven.

Het gebruik van -V 16 in combinatie met het controleren van de afsluitcode en DOS ERRORLEVEL kan helpen bij het opsporen van fouten in geautomatiseerde omgevingen, met name kwaliteitspoorten vóór een productierelease.