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 -?
- sqlcmd (Go)
- sqlcmd (ODBC)
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)
- sqlcmd (ODBC)
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)
Installeer de Windows Package Manager-client als u deze nog niet hebt.
Voer de volgende opdracht uit om sqlcmd (Go) te installeren.
winget install sqlcmd
Chocolatey
Installeer Chocolatey als u deze nog niet hebt.
Voer de volgende opdracht uit om sqlcmd (Go) te installeren.
choco install sqlcmd
Direct downloaden
Download de bijbehorende
-windows-amd64.zip
of-windows-arm.zip
asset uit de meest recente release van sqlcmd (Go) uit de GitHub-codeopslagplaats.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:
- Cloud Shell- starten
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
- De omgevingsvariabele
-r
vereist een0
of1
argument-R
schakelaar wordt verwijderd.-I
schakelaar wordt verwijderd. VoegSET QUOTED IDENTIFIER OFF
toe aan uw scripts om het gedrag van geciteerde identifiers uit te schakelen.-N
gebruikt nu een tekenreekswaarde die een vantrue
,false
ofdisable
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. Eenfalse
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-.
- Als
-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 doorEXIT(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 hetgo-mssqldb
stuurprogramma zien. Gebruik64
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. DeSQLCMDFORMAT
scriptvariabele bepaalt deze ook.
Opdrachtregelopties
Aanmeldingsopties
-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. Eenfalse
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
, false
of 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. Eenfalse
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 -P
gebruikt 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 SQLCMDSERVER
ingesteld.
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.exe
te 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 0
opgeeft, worden alleen foutberichten met een ernstniveau van 11 of hoger omgeleid. Als u 1
opgeeft, wordt alle foutberichtuitvoer, inclusief PRINT
, omgeleid. Deze optie heeft geen effect als u -o
gebruikt. 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 65534
zijn. 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 SQLCMDMAXVARTYPEWIDTH
in. 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 -b
is 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 ERRORLEVEL
1
.
-m foutenniveau
Hiermee bepaalt u welke foutberichten naar stdout
worden 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 SQLCMDERRORLEVEL
ingesteld. 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 32767
zijn. 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)
- Omgevingsvariabelen op systeemniveau
- Omgevingsvariabelen op gebruikersniveau
- Opdrachtprompt (
SET X=Y
) ingesteld voordat sqlcmd wordt uitgevoerd sqlcmd -v X=Y
: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
, SQLCMDPASSWORD
en 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 variabeleSQLCMDLOGINTIMEOUT
sqlcmd 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 :r
volgt.
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 ON
gebruikt, 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- retourneert0
normaal, anders wordt deERRORLEVEL
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.
Verwante inhoud
- Meer informatie over het nieuwe hulpprogramma go-sqlcmd op GitHub
- quickstart: Sql Server Linux-containerinstallatiekopieën uitvoeren met Docker
- sqlcmd - Start het hulpprogramma
- sqlcmd - Transact-SQL scriptbestanden uitvoeren
- sqlcmd: gebruik het hulpprogramma
- sqlcmd - Gebruiken met scriptvariabelen
- sqlcmd - Verbinding maken met de database-engine
- SQLCMD-scripts bewerken met queryeditor
- taakstappen beheren
- een cmdExec-taakstap maken