Dela via


sqlcmd-verktyg

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Med verktyget sqlcmd kan du ange Transact-SQL-instruktioner, systemprocedurer och skriptfiler via olika lägen:

  • Vid kommandotolken.
  • I Frågeredigeraren i SQLCMD-läge.
  • I en Windows-skriptfil.
  • I ett jobbsteg för operativsystemet (cmd.exe) i ett SQL Server Agent-jobb.

Anteckning

Även om Microsoft Entra ID är det nya namnet för Azure Active Directory (Azure AD), för att förhindra avbrott i befintliga miljöer, finns Azure AD kvar i vissa hårdkodade element som UI-fält, anslutningsproviders, felkoder och cmdletar. I den här artikeln är de två namnen utbytbara.

Ta reda på vilken version du har installerat

Det finns två versioner av sqlcmd:

  • Den go-mssqldb-baserade sqlcmd, ibland formaterad som go-sqlcmd. Den här versionen är ett fristående verktyg som du kan ladda ned oberoende av SQL Server.

  • DET ODBC-baserade sqlcmd, tillgängligt med SQL Server eller Microsoft Command Line Utilities och en del av mssql-tools-paketet i Linux.

För att fastställa vilken version du har installerat kör du följande -instruktion på kommandoraden:

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

När du använder den nya versionen av sqlcmd (Go), liknar utdata följande exempel:

Version: 1.3.1

Kontrollera version

Du kan använda sqlcmd --version för att avgöra vilken version som är installerad. Du bör ha minst version 1.0.0 installerat.

Viktig

Om du installerar sqlcmd (Go) via en pakethanterare ersätts sqlcmd (ODBC) med sqlcmd (Go) i din miljösökväg. Alla aktuella kommandoradssessioner måste stängas och öppnas igen för att detta ska börja gälla. sqlcmd (ODBC) tas inte bort och kan fortfarande användas genom att ange den fullständiga sökvägen till det körbara programmet. Du kan också uppdatera variabeln PATH för att ange vilken som har företräde. Om du vill göra det i Windows 11 öppnar du Systeminställningar och går till Om > Avancerade systeminställningar. När Systemegenskaper öppnas väljer du knappen Miljövariabler. I den nedre halvan, under Systemvariabler, välj Sökväg och välj sedan Redigera. Om platsen sqlcmd (Go) sparas till (C:\Program Files\sqlcmd är standard) och förekommer före C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn, används sqlcmd (Go). Du kan reversera ordningen för att göra sqlcmd (ODBC) till standard igen.

Ladda ned och installera sqlcmd

sqlcmd (Go) kan installeras plattformsoberoende på Microsoft Windows, macOS och Linux. Versioner som är nyare än 1.6 kanske inte är tillgängliga i alla pakethanterare. Det finns ännu inget beräknat datum för deras tillgänglighet.

winget (Windows Package Manager CLI)

  1. Installera Windows Package Manager-klienten om du inte redan har den.

  2. Kör följande kommando för att installera sqlcmd (Go).

    winget install sqlcmd
    

Chocolaty

  1. Installera Chocolatey om du inte redan har det.

  2. Kör följande kommando för att installera sqlcmd (Go).

    choco install sqlcmd
    

Direkt nedladdning

  1. Ladda ned motsvarande -windows-amd64.zip eller -windows-arm.zip resurs från den senaste versionen av sqlcmd (Go) från GitHub-kodförrådet.

  2. Extrahera sqlcmd.exe-filen från den nedladdade zip-mappen.

Förinstallerad

Azure Cloud Shell

Du kan prova verktyget sqlcmd från Azure Cloud Shell eftersom det är förinstallerat som standard:

Azure Data Studio

Om du vill köra SQLCMD-instruktioner i Azure Data Studioväljer du Aktivera SQLCMD- i redigeringsprogrammets verktygsfält.

SQL Server Management Studio (SSMS)

Om du vill köra SQLCMD-instruktioner i SQL Server Management Studio (SSMS) väljer du SQLCMD-läge i listrutan på den översta navigeringsmenyn.

SSMS använder Microsoft .NET Framework-SqlClient för körning i vanligt läge och SQLCMD-läge i Frågeredigeraren. När sqlcmd- körs från kommandoraden använder sqlcmd ODBC-drivrutinen. Eftersom olika standardalternativ kan gälla kan du se olika beteenden när du kör samma fråga i SSMS i SQLCMD-läge och i verktyget sqlcmd.

Syntax

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.

Mer detaljerad information om sqlcmd syntax och användning finns i ODBC sqlcmd syntax.

Ändringar som bryter bakåtkompatibilitet från sqlcmd (ODBC)

Flera växlar och beteenden ändras i verktyget sqlcmd (Go). Den mest up-to-date-listan över saknade flaggor för bakåtkompatibilitet finns i Prioritera implementering av bakåtkompatibilitetsflaggor GitHub-diskussion.

  • I tidigare versioner av sqlcmd (Go) togs -P-växeln bort tillfälligt och lösenord för SQL Server-autentisering kunde endast anges via följande mekanismer:

    • Miljövariabeln SQLCMDPASSWORD
    • Kommandot :CONNECT
    • När användaren uppmanas att göra det kan han eller hon skriva lösenordet för att slutföra en anslutning
  • -r kräver ett argument för 0 eller 1

  • -R växeln tas bort.

  • -I brytaren tas bort. Om du vill inaktivera beteendet för citerade identifierare lägger du till SET QUOTED IDENTIFIER OFF i skripten.

  • -N tar nu ett strängvärde som kan vara ett av true, falseeller disable för att ange krypteringsvalet. (default är detsamma som att utelämna parametern)

    • Om -N och -C inte tillhandahålls förhandlar sqlcmd autentisering med servern utan att verifiera servercertifikatet.
    • Om -N tillhandahålls men -C inte är det kräver sqlcmd validering av servercertifikatet. Ett false värde för kryptering kan fortfarande leda till kryptering av inloggningspaketet.
    • Om både -N och -C tillhandahålls använder sqlcmd sina värden för krypteringsförhandling.
    • Mer information om förhandlingar om klient-/serverkryptering finns i MS-TDS PRELOGIN-.
  • -u Den genererade Unicode-utdatafilen har UTF-16-Little-Endian byteordningsmärke (BOM) skrivet till den.

  • Vissa beteenden som bevarades för att upprätthålla kompatibilitet med OSQL kan ändras, till exempel justering av kolumnrubriker för vissa datatyper.

  • Alla kommandon måste få plats på en rad, även EXIT. Interaktivt läge söker inte efter öppna parenteser eller citattecken för kommandon och frågar inte efter efterföljande rader. Det här beteendet skiljer sig från ODBC-versionen, vilket gör att frågan som körs av EXIT(query) kan sträcka sig över flera rader.

Anslutningar från verktyget sqlcmd (Go) är begränsade till TCP-anslutningar. Just nu stöds inte namngivna rör i drivrutinen go-mssqldb.

Förbättringar

  • :Connect har nu en valfri -G-parameter för att välja någon av autentiseringsmetoderna för Azure SQL Database – SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword. Mer information finns i Microsoft Entra-autentisering. Om -G inte tillhandahålls används integrerad säkerhet eller SQL Server-autentisering, beroende på förekomsten av en -U användarnamnsparameter.

  • Med den nya kommandoradsparametern --driver-logging-level kan du se spårningar från go-mssqldb drivrutinen. Använd 64 för att se alla spårningar.

  • sqlcmd kan nu skriva ut resultat med ett lodrätt format. Använd den nya kommandoradsväxeln -F vertical för att ange den. Skriptvariabeln SQLCMDFORMAT styr den också.

Kommandoradsalternativ

-A

Loggar in på SQL Server med en dedikerad administratörsanslutning (DAC). Den här typen av anslutning används för att felsöka en server. Den här anslutningen fungerar endast med serverdatorer som stöder DAC. Om DAC inte är tillgängligt genererar sqlcmd ett felmeddelande och avslutar sedan. Mer information om DAC finns i Diagnostikanslutning för databasadministratörer. Alternativet -A stöds inte med alternativet -G. När du ansluter till Azure SQL Database med hjälp av -Amåste du vara administratör på den logiska SQL-servern. DAC är inte tillgängligt för en Microsoft Entra-administratör.

-C

Det här alternativet används av klienten för att konfigurera det så att det implicit litar på servercertifikatet utan validering. Det här alternativet motsvarar alternativet ADO.NET TRUSTSERVERCERTIFICATE = true.

För verktyget sqlcmd (Go) gäller även följande villkor:

  • Om -N och -C inte tillhandahålls förhandlar sqlcmd autentisering med servern utan att verifiera servercertifikatet.
  • Om -N tillhandahålls men -C inte är det kräver sqlcmd validering av servercertifikatet. Ett false värde för kryptering kan fortfarande leda till kryptering av inloggningspaketet.
  • Om både -N och -C tillhandahålls använder sqlcmd sina värden för krypteringsförhandling.

-d db_name

Utfärdar en USE <db_name>-instruktion när du startar sqlcmd. Det här alternativet anger sqlcmd skriptvariabel SQLCMDDBNAME. Den här parametern anger den första databasen. Standardvärdet är inloggningens standarddatabasegenskap. Om databasen inte finns genereras ett felmeddelande och sqlcmd avslutas.

-D

Tolkar servernamnet som anges för -S som ett DSN i stället för ett värdnamn. Mer information finns i DSN-stöd i sqlcmd och bcp i Ansluta med sqlcmd.

Not

Alternativet -D är endast tillgängligt på Linux- och macOS-klienter. På Windows-klienter hänvisade det tidigare till ett nu föråldrat alternativ som har tagits bort och ignoreras.

-l login_timeout

Anger antalet sekunder innan en sqlcmd-inloggning till ODBC-drivrutinen tidsgränsen går ut när du försöker ansluta till en server. Det här alternativet anger sqlcmd skriptvariabel SQLCMDLOGINTIMEOUT. Standardtidsgränsen för inloggning till sqlcmd är 8 sekunder. När du använder alternativet -G för att ansluta till Azure SQL Database eller Azure Synapse Analytics och autentisera med Microsoft Entra-ID rekommenderas ett timeout-värde på minst 30 sekunder. Tidsgränsen för inloggning måste vara ett tal mellan 0 och 65534. Om det angivna värdet inte är numeriskt eller inte tillhör det intervallet genererar sqlcmd ett felmeddelande. Värdet 0 anger att tidsgränsen ska vara oändlig.

-E

Använder en betrodd anslutning i stället för att använda ett användarnamn och lösenord för att logga in på SQL Server. Som standard använder sqlcmd det betrodda anslutningsalternativet utan att -E anges.

Alternativet -E ignorerar möjliga inställningar för användarnamn och lösenordsmiljövariabler, till exempel SQLCMDPASSWORD. Om alternativet -E används tillsammans med alternativet -U eller alternativet -P genereras ett felmeddelande.

-g

Anger inställningen Kolumnkryptering till Enabled. Mer information finns i Always Encrypted. Endast huvudnycklar som lagras i Windows Certificate Store stöds. Alternativet -g kräver minst sqlcmd version 13.1. För att fastställa din version kör du sqlcmd -?.

-G

Det här alternativet används av klienten när du ansluter till Azure SQL Database eller Azure Synapse Analytics för att ange att användaren ska autentiseras med Hjälp av Microsoft Entra-autentisering. Det här alternativet anger sqlcmd skriptvariabel SQLCMDUSEAAD = true. Alternativet -G kräver minst sqlcmd version 13.1. För att fastställa din version kör du sqlcmd -?. Mer information finns i Ansluta till SQL Database eller Azure Synapse Analytics med hjälp av Microsoft Entra-autentisering. Alternativet -A stöds inte med alternativet -G.

Alternativet -G gäller endast för Azure SQL Database och Azure Synapse Analytics.

Interaktiv Microsoft Entra-autentisering stöds för närvarande inte i Linux eller macOS. Microsoft Entra-integrerad autentisering kräver Microsoft ODBC Driver 17 för SQL Server version 17.6.1 eller senare och en korrekt konfigurerad Kerberos-miljö.

Mer information om Microsoft Entra-autentisering finns i Microsoft Entra-autentisering i sqlcmd.

-H workstation_name

Ett arbetsstationsnamn. Det här alternativet anger sqlcmd skriptvariabel SQLCMDWORKSTATION. Namnet på arbetsstationen visas i kolumnen hostname i sys.sysprocesses katalogvyn och kan returneras med hjälp av den lagrade proceduren sp_who. Om det här alternativet inte anges är standardvärdet det aktuella datornamnet. Det här namnet kan användas för att identifiera olika sqlcmd- sessioner.

-j

Skriver ut råa felmeddelanden på skärmen.

-K ansökningsavsikt

Deklarerar programarbetsbelastningstypen när du ansluter till en server. Det enda värde som stöds för närvarande är ReadOnly. Om -K inte anges stöder sqlcmd inte anslutning till en sekundär replik i en tillgänglighetsgrupp. Mer information finns i Aktiva sekundärfiler: Läsbar sekundär replik (AlwaysOn-tillgänglighetsgrupper).

-M multisubnet_failover

Ange alltid -M när du ansluter till tillgänglighetsgruppens lyssnare för en SQL Server-tillgänglighetsgrupp eller en SQL Server-redundansklusterinstans. -M ger snabbare identifiering av och anslutning till den (för närvarande) aktiva servern. Om -M inte har angetts är -M inaktiverat. Mer information om lyssnare, klientanslutning, redundansklustring för program, skapande och konfiguration av tillgänglighetsgrupper (SQL Server), redundanskluster och AlwaysOn-tillgänglighetsgrupper (SQL Server)och aktiva sekundärrepliker: Läsbara sekundära repliker(AlwaysOn-tillgänglighetsgrupper).

-N

Det här alternativet används av klienten för att begära en krypterad anslutning.

För verktyget sqlcmd (Go) tar -N nu ett strängvärde som kan vara ett av true, falseeller disable för att ange krypteringsalternativet. (default är detsamma som att utelämna parametern):

  • Om -N och -C inte tillhandahålls förhandlar sqlcmd autentisering med servern utan att verifiera servercertifikatet.
  • Om -N tillhandahålls men -C inte är det kräver sqlcmd validering av servercertifikatet. Ett false värde för kryptering kan fortfarande leda till kryptering av inloggningspaketet.
  • Om både -N och -C tillhandahålls använder sqlcmd sina värden för krypteringsförhandling.

-P lösenord

Ett användarangivet lösenord. Lösenord är skiftlägeskänsliga. Om alternativet -U används och alternativet -P inte används och SQLCMDPASSWORD miljövariabeln inte har angetts sqlcmd uppmanar användaren att ange ett lösenord. Vi rekommenderar inte att du använder ett null-lösenord (tomt) men du kan ange null-lösenordet med hjälp av ett par sammanhängande dubbla citattecken för parametervärdet ("").

Viktig

Användning av -P bör betraktas som osäkert. Undvik att ange lösenordet på kommandoraden. Du kan också använda miljövariabeln SQLCMDPASSWORD eller interaktivt ange lösenordet genom att utelämna alternativet -P.

Vi rekommenderar att du använder ett starkt lösenord.

Lösenordsprompten visas genom att skriva ut lösenordsprompten till konsolen på följande sätt: Password:

Användarindata är dolda. Det innebär att ingenting visas och markören förblir på plats.

Med miljövariabeln SQLCMDPASSWORD kan du ange ett standardlösenord för den aktuella sessionen. Därför behöver lösenord inte hårdkodas i batchfiler. I följande exempel anges först variabeln SQLCMDPASSWORD i kommandotolken och kommer sedan åt verktyget sqlcmd.

I kommandotolken skriver du:

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

Om kombinationen av användarnamn och lösenord är felaktig genereras ett felmeddelande.

Not

Miljövariabeln OSQLPASSWORD har sparats för bakåtkompatibilitet. Miljövariabeln SQLCMDPASSWORD har företräde framför OSQLPASSWORD miljövariabeln. Det innebär att sqlcmd och osql kan användas bredvid varandra utan interferens. Gamla skript fortsätter att fungera.

Om alternativet -P används med alternativet -E genereras ett felmeddelande.

Om alternativet -P följs av fler än ett argument genereras ett felmeddelande och programmet avslutas.

Ett lösenord som innehåller specialtecken kan generera ett felmeddelande. Du bör undvika specialtecken när du använder -Peller använda miljövariabeln SQLCMDPASSWORD i stället.

-S [protokoll:]server[\instans_namn][,port]

Anger den instans av SQL Server som du vill ansluta till. Den anger sqlcmd skriptvariabel SQLCMDSERVER.

Ange server_name för att ansluta till standardinstansen av SQL Server på serverdatorn. Ange server_name[\instance_name] för att ansluta till en namngiven instans av SQL Server på den serverdatorn. Om ingen serverdator har angetts ansluter sqlcmd till standardinstansen av SQL Server på den lokala datorn. Det här alternativet krävs när du kör sqlcmd från en fjärrdator i nätverket.

protokoll kan vara tcp (TCP/IP), lpc (delat minne) eller np (namngivna pipes).

Om du inte anger en server_name[\instance_name] när du startar sqlcmdsöker SQL Server efter och använder miljövariabeln SQLCMDSERVER.

Anteckning

Miljövariabeln OSQLSERVER har sparats för bakåtkompatibilitet. Miljövariabeln SQLCMDSERVER har företräde framför OSQLSERVER miljövariabeln. Det innebär att sqlcmd och osql kan användas bredvid varandra utan interferens. Gamla skript fortsätter att fungera.

-U login_id

Inloggningsnamnet eller det inneslutna databasanvändarnamnet. För användare av enskilda databaser måste du ange databasnamnalternativet (-d).

Anteckning

Miljövariabeln OSQLUSER har sparats för bakåtkompatibilitet. Miljövariabeln SQLCMDUSER har företräde framför OSQLUSER miljövariabeln. Det innebär att sqlcmd och osql kan användas bredvid varandra utan interferens. Gamla skript fortsätter att fungera.

Om du inte anger antingen alternativet -U eller alternativet -P försöker sqlcmd ansluta med Windows-autentiseringsläge. Autentiseringen baseras på Windows-kontot för användaren som kör sqlcmd.

Om alternativet -U används med alternativet -E (beskrivs senare i den här artikeln) genereras ett felmeddelande. Om alternativet -U följs av fler än ett argument genereras ett felmeddelande och programmet avslutas.

-z nytt_lösenord

Ändra lösenordet:

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 nytt_lösenord

Ändra lösenordet och avsluta:

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

Alternativ för in- och utdata

-f kodsida | i:kodsidetabell[,o:kodsidetabell] | o:kodsidetabell[,i:kodsidetabell]

Anger in- och utdatakodsidorna. Kodsidans nummer är ett numeriskt värde som anger en installerad Windows-kodsida.

Kodsideskonverteringsregler:

  • Om inga kodsidor anges använder sqlcmd den aktuella kodsidan för både indata- och utdatafiler, såvida inte indatafilen är en Unicode-fil, i vilket fall ingen konvertering krävs.

  • sqlcmd identifierar automatiskt både big-endian och little-endian Unicode-indatafiler. Om alternativet -u har angetts är utdata alltid i little-endian Unicode.

  • Om ingen utdatafil har angetts är utdatakodsidan konsolens kodsida. Med den här metoden kan utdata visas korrekt i konsolen.

  • Flera indatafiler antas ha samma kodsida. Unicode- och icke-Unicode-indatafiler kan blandas.

Ange chcp i kommandotolken för att verifiera kodsidan för cmd.exe.

-i input_file[,input_file2...]

Identifierar filen som innehåller en batch med Transact-SQL-instruktioner eller lagrade procedurer. Flera filer kan anges som läs- och bearbetas i ordning. Använd inga blanksteg mellan filnamn. sqlcmd kontrollerar först om alla angivna filer finns. Om en eller flera filer inte finns sqlcmd avslutas. Alternativen -i och -Q/-q är ömsesidigt uteslutande.

Obs

Om du använder alternativet -i följt av en eller flera ytterligare parametrar måste du använda ett blanksteg mellan parametern och värdet. Det här är ett känt problem i sqlcmd (Go).

Sökvägsexempel:

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

Filsökvägar som innehåller blanksteg måste omges av citattecken.

Det här alternativet kan användas mer än en gång:

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

-o utdatafil

Identifierar filen som tar emot utdata från sqlcmd.

Om -u anges lagras output_file i Unicode-format. Om filnamnet inte är giltigt genereras ett felmeddelande och sqlcmd avslutas. sqlcmd stöder inte samtidig skrivning av flera sqlcmd- processer till samma fil. Filutdata är skadade eller felaktiga. Alternativet -f är också relevant för filformat. Den här filen skapas om den inte finns. En fil med samma namn från en tidigare sqlcmd session skrivs över. Filen som anges här är inte den stdout filen. Om en stdout fil anges används inte den här filen.

Sökvägsexempel:

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

Filsökvägar som innehåller blanksteg måste omges av citattecken.

-r[0 | 1]

Omdirigerar felmeddelanden till skärmen (stderr). Om du inte anger en parameter eller om du anger 0omdirigeras endast felmeddelanden som har en allvarlighetsgrad på 11 eller högre. Om du anger 1omdirigeras alla felmeddelandeutdata, inklusive PRINT. Det här alternativet har ingen effekt om du använder -o. Som standard skickas meddelanden till stdout.

Not

För verktyget sqlcmd (Go) kräver -r ett argument för 0 eller 1.

-R

gäller endast för: ODBC sqlcmd.

Gör att sqlcmd anpassar numeriska kolumner, valuta, datum och tidskolumner som hämtats från SQL Server efter klientens nationella inställningar. Som standard visas dessa kolumner med hjälp av serverns regionala inställningar.

-u

Anger att output_file lagras i Unicode-format, oavsett formatet för input_file.

Not

För verktyget sqlcmd (Go) har den genererade Unicode-utdatafilen fått Byte-order mark (BOM) för UTF-16 Little-Endian skriven till sig.

Alternativ för frågekörning

-e

Skriver indataskript till standardutdataenheten (stdout).

-Jag

gäller endast för: ODBC sqlcmd.

Anger anslutningsalternativet SET QUOTED_IDENTIFIER till ON. Som standard är den inställd på OFF. Mer information finns i SET QUOTED_IDENTIFIER (Transact-SQL).

Not

Om du vill inaktivera beteendet för citerade identifierare i verktyget sqlcmd (Go) lägger du till SET QUOTED IDENTIFIER OFF i skripten.

-q "kommandoradsförfrågan"

Kör en fråga när sqlcmd startar, men avslutar inte sqlcmd- när frågan har körts. Flera semikolonavgränsade fråge kan köras. Använd citattecken runt frågan, som du ser i följande exempel.

I kommandotolken skriver du:

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;"

Viktig

Använd inte GO terminator i frågan.

Om -b anges tillsammans med det här alternativet avslutas sqlcmd- vid fel. -b beskrivs någon annanstans i den här artikeln.

-Q "cmdline query"

Kör en fråga när sqlcmd startar och sedan omedelbart avslutar sqlcmd. Flera semikolonavgränsade sökfrågor kan köras.

Använd citattecken runt frågan, som du ser i följande exempel.

I kommandotolken skriver du:

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;"

Viktig

Använd inte GO terminator i frågan.

Om -b anges tillsammans med det här alternativet avslutas sqlcmd- vid fel. -b beskrivs någon annanstans i den här artikeln.

-t fråge_timeout

Anger antalet sekunder innan ett kommando (eller Transact-SQL-instruktion) överskrider tidsgränsen. Det här alternativet anger sqlcmd skriptvariabel SQLCMDSTATTIMEOUT. Om ett query_timeout värde inte har angetts löper kommandot inte ut. query_timeout måste vara ett tal mellan 1 och 65534. Om det angivna värdet inte är numeriskt eller inte tillhör det intervallet genererar sqlcmd ett felmeddelande.

Notera

Det faktiska tidsgränsvärdet kan variera från det angivna query_timeout värdet med flera sekunder.

-v var = värde [ var = värde... ]

Skapar en sqlcmd skriptvariabel som kan användas i ett sqlcmd- skript. Omge värdet med citattecken om värdet innehåller blanksteg. Du kan ange flera <var>="<value>" värden. Om det finns fel i något av de angivna värdena genererar sqlcmd ett felmeddelande och avslutas.

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

Orsakar sqlcmd- att ignorera skriptvariabler. Den här parametern är användbar när ett skript innehåller många INSERT-instruktioner som kan innehålla strängar som har samma format som vanliga variabler, till exempel $(<variable_name>).

Formatalternativ

-h rubriker

Anger antalet rader som ska skrivas ut mellan kolumnrubrikerna. Standardvärdet är att skriva ut rubriker en gång för varje uppsättning frågeresultat. Det här alternativet anger sqlcmd skriptvariabel SQLCMDHEADERS. Använd -1 för att ange att rubriker inte ska skrivas ut. Alla värden som inte är giltiga gör att sqlcmd generera ett felmeddelande och sedan avsluta.

-k [1 | 2]

Tar bort alla kontrolltecken, till exempel flikar och nya radtecken från utdata. Den här parametern bevarar kolumnformatering när data returneras.

  • -k tar bort kontrolltecken.
  • -k1 ersätter varje kontrolltecken med ett blanksteg.
  • -k2 ersätter på varandra följande kontrolltecken med ett enda blanksteg.

-s kol_separator

Anger kolumnavgränsarens tecken. Standardvärdet är ett tomt utrymme. Det här alternativet anger sqlcmd skriptvariabel SQLCMDCOLSEP. Om du vill använda tecken som har särskild betydelse för operativsystemet, till exempel et-et (&) eller semikolon (;), omger du tecknet inom citattecken ("). Kolumnavgränsaren kan vara valfritt 8-bitarstecken.

-w skärmbredd

Anger skärmbredden för utdata. Det här alternativet anger sqlcmd skriptvariabel SQLCMDCOLWIDTH. Kolumnbredden måste vara ett tal som är större än 8 och mindre än 65536. Om den angivna kolumnbredden inte hamnar i det intervallet genererar sqlcmd ett felmeddelande. Standardbredden är 80 tecken. När en utdatarad överskrider den angivna kolumnbredden omsluts den till nästa rad.

-W

Det här alternativet tar bort avslutande blanksteg från en kolumn. Använd det här alternativet tillsammans med alternativet -s när du förbereder data som ska exporteras till ett annat program. Det går inte att använda med alternativen -y eller -Y.

-y variable_length_type_display_width

Anger sqlcmd skriptvariabel SQLCMDMAXVARTYPEWIDTH. Standardvärdet är 256. Det begränsar antalet tecken som returneras för datatyperna med stor variabel längd:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • XML
  • användardefinierade datatyper (UDT)
  • text
  • ntext
  • bild

UDT kan vara av fast längd beroende på implementeringen. Om längden på en UDT med fast längd är kortare än display_widthpåverkas inte värdet på den returnerade UDT:n. Om längden överstiger display_width, förkortas utdata.

Försiktighet

Använd alternativet -y 0 med extrem försiktighet eftersom det kan orsaka betydande prestandaproblem på både servern och nätverket, beroende på storleken på de data som returneras.

-Y fixed_length_type_display_width

Anger sqlcmd skriptvariabel SQLCMDMAXFIXEDTYPEWIDTH. Standardvärdet är 0 (obegränsat). Begränsar antalet tecken som returneras för följande datatyper:

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

Alternativ för felrapportering

-b

Anger att sqlcmd avslutar och returnerar ett DOS ERRORLEVEL värde när ett fel inträffar. Värdet som returneras till variabeln ERRORLEVEL är 1 när SQL Server-felmeddelandet har en allvarlighetsgrad som är större än 10. annars returneras värdet 0. Om alternativet -V har angetts utöver -brapporterar sqlcmd inget fel om allvarlighetsgraden är lägre än de värden som anges med hjälp av -V. Batchfiler för kommandotolken kan testa värdet för ERRORLEVEL och hantera felet på rätt sätt. sqlcmd rapporterar inte fel för allvarlighetsgrad 10 (informationsmeddelanden).

Om skriptet sqlcmd innehåller en felaktig kommentar, syntaxfel eller saknar en skriptvariabel ERRORLEVEL returneras 1.

-m error_level

Styr vilka felmeddelanden som skickas till stdout. Meddelanden som har en allvarlighetsgrad som är större än eller lika med den här nivån skickas. När det här värdet är inställt på -1skickas alla meddelanden, inklusive informationsmeddelanden. Mellanslag är inte tillåtna mellan -m och -1. Till exempel är -m-1 giltigt och -m -1 inte är det.

Det här alternativet anger även sqlcmd skriptvariabel SQLCMDERRORLEVEL. Den här variabeln har standardvärdet 0.

-V felnivåallvarlighet

Styr allvarlighetsgraden som används för att ange variabeln ERRORLEVEL. Felmeddelanden som har allvarlighetsnivåer som är större än eller lika med den här värdeuppsättningen ERRORLEVEL. Värden som är mindre än 0 rapporteras som 0. Batch- och CMD-filer kan användas för att testa värdet för variabeln ERRORLEVEL.

Diverse alternativ

-paketstorlek

Begär ett paket med en annan storlek. Det här alternativet anger sqlcmd skriptvariabel SQLCMDPACKETSIZE. packet_size måste vara ett värde mellan 512 och 32767. Standardvärdet är 4096. En större paketstorlek kan förbättra prestanda för körning av skript som har många Transact-SQL-instruktioner mellan GO kommandon. Du kan begära en större paketstorlek. Men om begäran nekas använder sqlcmd serverns standardvärde för paketstorlek.

-c batch_terminator

Anger tecknet för batch-slut. Som standard avslutas kommandon och skickas till SQL Server genom att skriva ordet GO på en rad på egen hand. När du återställer batchavslutaren ska du inte använda Transact-SQL reserverade nyckelord eller tecken som har särskild betydelse för operativsystemet, även om de föregås av ett omvänt snedstreck.

-L[c]

Visar en lista över lokalt konfigurerade serverdatorer och namnen på de serverdatorer som sänder i nätverket. Den här parametern kan inte användas i kombination med andra parametrar. Det maximala antalet serverdatorer som kan visas är 3 000. Om serverlistan förkortas på grund av buffertens storlek visas ett varningsmeddelande.

Not

På grund av typen av sändning i nätverk kanske sqlcmd inte får ett snabbt svar från alla servrar. Listan över servrar som returneras kan därför variera för varje anrop av det här alternativet.

Om den valfria parametern c anges visas utdata utan Servers: rubrikrad och varje serverrad visas utan inledande blanksteg. Den här presentationen kallas för rent resultat. Rensa utdata förbättrar bearbetningsprestandan för skriptspråk.

-p[1]

Skriver ut prestandastatistik för varje resultatuppsättning. Följande visning är ett exempel på formatet för prestandastatistik:

Network packet size (bytes): n

x xact[s]:

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

Var:

  • x = Antal transaktioner som bearbetas av SQL Server.
  • t1 = Total tid för alla transaktioner.
  • t2 = Genomsnittlig tid för en enskild transaktion.
  • t3 = Genomsnittligt antal transaktioner per sekund.

Alla tider är i millisekunder.

Om den valfria parametern 1 anges är utdataformatet för statistiken i kolonavgränsat format som enkelt kan importeras till ett kalkylblad eller bearbetas av ett skript.

Om den valfria parametern är något annat värde än 1genereras ett fel och sqlcmd avslutas.

-X[1]

Inaktiverar kommandon som kan äventyra systemsäkerheten när sqlcmd körs från en batchfil. De inaktiverade kommandona känns fortfarande igen. sqlcmd utfärdar ett varningsmeddelande och fortsätter. Om den valfria parametern 1 anges genererar sqlcmd ett felmeddelande och avslutas. Följande kommandon inaktiveras när alternativet -X används:

  • ED
  • !! kommando

Om alternativet -X anges förhindrar det att miljövariabler skickas vidare till sqlcmd-. Det förhindrar också att startskriptet som anges med hjälp av SQLCMDINI skriptvariabeln körs. Mer information om sqlcmd skriptvariabler finns i sqlcmd – Använd med skriptvariabler.

-?

Visar versionen av sqlcmd och en syntaxsammanfattning av sqlcmd- alternativ.

Notis

På macOS kör du sqlcmd '-?' (med citattecken) i stället.

Anmärkningar

Alternativ behöver inte användas i den ordning som visas i syntaxavsnittet.

Not

Om du använder alternativet -i följt av en eller flera ytterligare parametrar måste du använda ett blanksteg mellan parametern och värdet. Det här är ett känt problem i sqlcmd (Go).

När flera resultat returneras skriver sqlcmd ut en tom rad mellan varje resultatuppsättning i en batch. Dessutom visas inte <x> rows affected-meddelandet när det inte gäller det uttryck som exekveras.

Om du vill använda sqlcmd interaktivt skriver du sqlcmd i kommandotolken med något eller flera av de alternativ som beskrivs tidigare i den här artikeln. Mer information finns i Använda sqlcmd-verktyget

Not

Alternativen -l, -Q, -Z eller -i gör att sqlcmd avslutas efter att ha körts.

Den totala längden på sqlcmd kommandoraden i kommandomiljön (till exempel cmd.exe eller bash), inklusive alla argument och expanderade variabler, bestäms av det underliggande operativsystemet.

Variabelordning (från låg till hög)

  1. Miljövariabler på systemnivå
  2. Miljövariabler på användarnivå
  3. Kommandoskal (SET X=Y) ställs in vid kommandoprompten innan sqlcmd
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Not

Om du vill visa miljövariablerna öppnar du Systemi Kontrollpanelenoch väljer sedan fliken Avancerat.

sqlcmd-skriptvariabler

Variabel Relaterat alternativ R/W Standard
SQLCMDUSER -U R ""
SQLCMDPASSWORD -P -- ""
SQLCMDSERVER -S R "DefaultLocalInstance"
SQLCMDWORKSTATION -H R Datornamn
SQLCMDDBNAME -d R ""
SQLCMDLOGINTIMEOUT -l R/W "8" (sekunder)
SQLCMDSTATTIMEOUT -t R/W "0" = vänta på obestämd tid
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" = obegränsat
SQLCMDEDITOR R/W edit.com
SQLCMDINI R ""
SQLCMDUSEAAD -G R/W ""

SQLCMDUSER, SQLCMDPASSWORDoch SQLCMDSERVER anges när :Connect används.

R anger att värdet bara kan anges en gång under programinitieringen.

R/W anger att värdet kan ändras med hjälp av kommandot :setvar och efterföljande kommandon påverkas av det nya värdet.

sqlcmd-kommandon

Förutom Transact-SQL-instruktioner i sqlcmdär följande kommandon också tillgängliga:

GO [ antal ]

:List

[:]RESET

:Error

[:]ED

:Out

[:]!!

:Perftrace

[:]QUIT

:Connect

[:]EXIT

:On Error

:r

:Help

:ServerList

:XML [ ON | OFF ]

:Setvar

:Listvar

Tänk på följande när du använder sqlcmd kommandon:

  • Alla sqlcmd-kommandon, förutom GO, måste föregås av ett kolon (:).

    Viktig

    För att upprätthålla bakåtkompatibilitet med befintliga osql- skript identifieras vissa av kommandona utan kolonet, vilket anges av :.

  • sqlcmd kommandon identifieras endast om de förekommer i början av en rad.

  • Alla sqlcmd- kommandon är skiftlägesokänsliga.

  • Varje kommando måste finnas på en separat rad. Ett kommando kan inte följas av en Transact-SQL-instruktion eller ett annat kommando.

  • Kommandon körs omedelbart. De placeras inte i körningsbufferten som Transact-SQL instruktioner är.

Redigera kommandon

[:]ED

Startar textredigeraren. Den här redigeraren kan användas för att redigera den aktuella Transact-SQL batchen eller den senast utförda batchen. Om du vill redigera den senast utförda batchen måste kommandot ED skrivas direkt efter att den senaste batchen har slutfört körningen.

Textredigeraren definieras av miljövariabeln SQLCMDEDITOR. Standardredigeraren är Edit. Om du vill ändra redigeraren anger du miljövariabeln SQLCMDEDITOR. Om du till exempel vill ställa in redigeraren på Microsoft Notepad skriver du i kommandotolken:

SET SQLCMDEDITOR=notepad

[:]NOLLSTÄLLA

Rensar uttalscacheminnet.

:Lista

Skriver ut innehållet i cacheminnet.

Variabler

:Setvar <var> [ "värde" ]

Definierar sqlcmd skriptvariabler. Skriptvariabler har följande format: $(VARNAME).

Variabelnamn är skiftlägesokänsliga.

Skriptvariabler kan anges på följande sätt:

  • Implicit användning av ett kommandoradsalternativ. Alternativet -l anger till exempel variabeln SQLCMDLOGINTIMEOUTsqlcmd.

  • Uttryckligen med hjälp av kommandot :Setvar.

  • Genom att definiera en miljövariabel innan du kör sqlcmd.

Not

Alternativet -X förhindrar att miljövariabler skickas vidare till sqlcmd-.

Om en variabel som definieras med hjälp av :Setvar och en miljövariabel har samma namn har variabeln som definieras med hjälp av :Setvar företräde.

Variabelnamn får inte innehålla tomma blankstegstecken.

Variabelnamn kan inte ha samma formulär som ett variabeluttryck, till exempel $(var).

Om strängvärdet för skriptvariabeln innehåller blanksteg, omge värdet med citattecken. Om ett värde för en skriptvariabel inte anges tas skriptvariabeln bort.

:Listvar

Visar en lista över de skriptvariabler som för närvarande har angetts.

Notera

Endast skriptvariabler som anges av sqlcmdoch de som anges med kommandot :Setvar visas.

Utdatakommandon

:Fel <filnamn> | STDERR | STDOUT

Omdirigera alla felutdata till filen som anges av filnamn, till stderr eller till stdout. Kommandot :Error kan visas flera gånger i ett skript. Som standard skickas felutdata till stderr.

  • filnamn

    Skapar och öppnar en fil som tar emot utdata. Om filen redan finns trunkeras den till noll byte. Om filen inte är tillgänglig på grund av behörigheter eller andra orsaker växlas inte utdata om, vilket innebär att det skickas till det senast angivna målet eller standardmålet.

  • STDERR

    Växlar felutdata till stderr-strömmen. Om detta har blivit omdirigerat, tar det mål som strömmen har blivit omdirigerad till emot felutdata.

  • STDOUT

    Byter felutdata till stdout-ström. Om strömmen har omdirigerats, kommer det mål som strömmen har omdirigerats till att ta emot felutdata.

:Ut <filnamn> | STDERR | STDOUT

Skapar och omdirigerar alla frågeresultat till filen som anges av filnamn, till stderr eller till stdout. Som standard skickas utdata till stdout. Om filen redan finns trunkeras den till noll byte. Kommandot :Out kan visas flera gånger i ett skript.

:Perftrace <filnamn> | STDERR | STDOUT

Skapar och omdirigerar all prestandaspårningsinformation till filen som anges av filnamn, till stderr eller till stdout. Som standard skickas prestandaspårningsutdata till stdout. Om filen redan finns trunkeras den till noll byte. Kommandot :Perftrace kan visas flera gånger i ett skript.

Körningskontrollkommandon

Om fel [ avsluta | ignorera ]

Anger vilken åtgärd som ska utföras när ett fel inträffar under skript- eller batchkörningen.

När alternativet exit används avslutas sqlcmd med lämpligt felvärde.

När alternativet ignore används ignorerar sqlcmd felet och fortsätter att köra batchen eller skriptet. Som standard skrivs ett felmeddelande ut.

[:]AVSLUTA

Orsakar att sqlcmd avslutas.

[:]EXIT [ ( -instruktion ) ]

Låter dig använda resultatet av en SELECT-instruktion som returvärde i sqlcmd. Om det är numeriskt konverteras den första kolumnen i den sista resultatraden till ett heltal på 4 byte (lång). MS-DOS, Linux och macOS skickar den låga byte till den överordnade processen eller operativsystemfelnivån. Windows 2000 och senare versioner skickar heltalet på 4 byte i sin helhet. Syntaxen är :EXIT(query).

Till exempel:

:EXIT(SELECT @@ROWCOUNT)

Du kan också ta med parametern :EXIT som en del av en batchfil. I kommandotolken skriver du till exempel:

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

Verktyget sqlcmd skickar allt mellan parenteserna (()) till servern. Om en systemlagrad procedur väljer en uppsättning och returnerar ett värde, returneras bara valet. Instruktionen :EXIT() utan något mellan parenteserna kör allt före den i batchen och avslutas sedan utan ett returvärde.

När en felaktig fråga har angetts avslutas sqlcmd utan ett returvärde.

Här är en lista över EXIT format:

  • :EXIT

    Kör inte batchen och avslutas sedan omedelbart och returnerar inget värde.

  • :EXIT( )

    Kör batchen och avslutar och returnerar inget värde.

  • :EXIT(query)

    Kör batchen som innehåller frågan och avslutas sedan när den returnerar resultatet av frågan.

Om RAISERROR används i ett sqlcmd--skript och tillståndet 127 har genererats, avslutas sqlcmd och meddelande-ID:t returneras till klienten. Till exempel:

RAISERROR(50001, 10, 127)

Det här felet gör att skriptet sqlcmd slutar och returnerar meddelande-ID 50001 till klienten.

Returvärdena -1 till -99 reserveras av SQL Server och sqlcmd definierar följande ytterligare returvärden:

Returvärde Beskrivning
-100 Ett fel uppstod innan returvärdet skulle väljas.
-101 Inga rader hittades när returvärdet skulle väljas.
-102 Konverteringsfel uppstod när returvärdet skulle väljas.

GO [antal]

GO signalerar både slutet av en batch och körningen av cachelagrade Transact-SQL-instruktioner. Batchen körs flera gånger som separata batchar. Du kan inte deklarera en variabel mer än en gång i en enda batch.

Diverse kommandon

:r <filnamn>

Parsar ytterligare Transact-SQL-instruktioner och sqlcmd kommandon från filen som anges av filnamn i instruktionscacheminnet. filnamn läses relativt till startkatalogen där sqlcmd kördes.

Om filen innehåller Transact-SQL-instruktioner som inte följs av GOmåste du ange GO på raden som följer :r.

Filen kommer att läsas och köras efter att en batchavgränsare har påträffats. Du kan utfärda flera :r kommandon. Filen kan innehålla valfritt sqlcmd--kommando, inklusive batchavslutaren GO.

Not

Antalet rader som visas i interaktivt läge ökas med en för varje :r kommando som påträffas. Kommandot :r visas i utdata från listkommandot.

:ServerList

Visar en lista över lokalt konfigurerade servrar och namnen på servrarna som sänder i nätverket.

:Anslut server_name[\instance_name] [-l timeout] [-U user_name [-P lösenord]]

Ansluter till en instans av SQL Server. Stänger även den aktuella anslutningen.

Alternativ för timeout

Värde Uppförande
0 Vänta för evigt
n>0 Vänta i n sekunder

Den SQLCMDSERVER skriptvariabeln återspeglar den aktuella aktiva anslutningen.

Om timeout inte anges är värdet för variabeln SQLCMDLOGINTIMEOUT standard.

Om endast user_name anges (antingen som ett alternativ eller som en miljövariabel) uppmanas användaren att ange ett lösenord. Användarna tillfrågas inte om SQLCMDUSER eller SQLCMDPASSWORD miljövariabler har angetts. Om du inte anger alternativ eller miljövariabler används Windows-autentiseringsläget för att logga in. Om du till exempel vill ansluta till en instans instance1, för SQL Server, myserver, med hjälp av integrerad säkerhet använder du följande kommando:

:connect myserver\instance1

Om du vill ansluta till standardinstansen av myserver med hjälp av skriptvariabler använder du följande inställningar:

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

[:]!! kommando

Kör operativsystemkommandon. Om du vill köra ett operativsystemkommando startar du en rad med två utropstecken (!!) följt av kommandot operativsystem. Till exempel:

:!! dir

Noté

Kommandot körs på den dator där sqlcmd körs.

:XML [ PÅ | AV ]

Mer information finns i XML-utdataformat och JSON-utdataformat i den här artikeln.

:Hjälp

Visar sqlcmd-kommandon tillsammans med en kort beskrivning av varje kommando.

sqlcmd-filnamn

sqlcmd indatafiler kan anges med alternativet -i eller kommandot :r. Utdatafiler kan anges med alternativet -o eller kommandona :Error, :Out och :Perftrace. Följande är några riktlinjer för att arbeta med dessa filer:

  • :Error, :Out och :Perftrace ska använda separata filnamn värde. Om samma filnamn används kan indata från kommandona blandas.

  • Om en indatafil som finns på en fjärrserver anropas från sqlcmd på en lokal dator, och filen innehåller en sökväg för enhetsfilen, till exempel :Out c:\OutputFile.txt, skapas utdatafilen på den lokala datorn och inte på fjärrservern.

  • Giltiga filsökvägar är: C:\<filename>, \\<Server>\<Share$>\<filename>och "C:\Some Folder\<file name>". Om det finns ett blanksteg i sökvägen använder du citattecken.

  • Varje ny sqlcmd session skriver över befintliga filer som har samma namn.

Informationsmeddelanden

sqlcmd skriver ut alla informationsmeddelanden som skickas av servern. I följande exempel skrivs ett informationsmeddelande ut när Transact-SQL-instruktionerna har körts.

Starta sqlcmd. I kommandotolken sqlcmd skriver du frågan:

USE AdventureWorks2022;
GO

När du trycker på RETURskrivs följande informationsmeddelande ut:

Changed database context to 'AdventureWorks2022'.

Utdataformat från Transact-SQL förfrågningar

sqlcmd skriver först ut en kolumnrubrik som innehåller de kolumnnamn som anges i listan med val. Kolumnnamnen avgränsas med hjälp av det SQLCMDCOLSEP tecknet. Som standard är detta ett blanksteg. Om kolumnnamnet är kortare än kolumnbredden fylls utdata med mellanslag upp till nästa kolumn.

Den här raden följs av en avgränsarlinje som är en serie strecktecken. Följande utdata visar ett exempel.

Starta sqlcmd. I kommandotolken sqlcmd skriver du frågan:

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

När du trycker på RETURreturneras följande resultatuppsättning.

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

Även om den BusinessEntityID kolumnen bara är fyra tecken bred, har den expanderats för att passa det längre kolumnnamnet. Som standard avslutas utdata med 80 tecken. Den här bredden kan ändras med hjälp av alternativet -w eller genom att ange SQLCMDCOLWIDTH skriptvariabel.

XML-utdataformat

XML-utdata som är resultatet av en FOR XML-sats är utdata, oformaterade, i en kontinuerlig ström.

När du förväntar dig XML-utdata använder du följande kommando: :XML ON.

Anteckning

sqlcmd returnerar felmeddelanden i vanligt format. Felmeddelandena matas också ut i XML-textströmmen i XML-format. Med hjälp av :XML ONvisar sqlcmd inte informationsmeddelanden.

Om du vill inaktivera XML-läget använder du följande kommando: :XML OFF.

Kommandot GO bör inte visas innan kommandot :XML OFF utfärdas eftersom kommandot :XML OFF växlar sqlcmd tillbaka till radorienterade utdata.

XML-data (strömmade) och raduppsättningsdata kan inte blandas. Om kommandot :XML ON inte har utfärdats innan en Transact-SQL-instruktion som matar ut XML-strömmar körs, är utdata förvrängda. När kommandot :XML ON har utfärdats kan du inte köra Transact-SQL instruktioner som matar ut vanliga raduppsättningar.

Obs

Kommandot :XML stöder inte instruktionen SET STATISTICS XML.

JSON-utdataformat

När du förväntar dig JSON-utdata använder du följande kommando: :XML ON. Annars innehåller utdata både kolumnnamnet och JSON-texten. Dessa utdata är inte giltiga JSON.

Om du vill inaktivera XML-läget använder du följande kommando: :XML OFF.

Mer information finns i XML-utdataformat i den här artikeln.

Använda Microsoft Entra-autentisering

Exempel med Microsoft Entra-autentisering:

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

metodtips för sqlcmd

Använd följande metoder för att maximera säkerhet och effektivitet.

  • Använd integrerad säkerhet.

  • Använd -X[1] i automatiserade miljöer.

  • Skydda indata- och utdatafiler med hjälp av lämpliga filsystembehörigheter.

  • För att öka prestandan gör du så mycket i en sqlcmd session som du kan, i stället för i en serie sessioner.

  • Ange tidsgränsvärden för batch- eller frågekörning högre än du förväntar dig att det tar att köra batchen eller frågan.

Använd följande metoder för att maximera korrektheten:

  • Använd -V 16 för att logga alla allvarlighetsgrad 16-nivåmeddelanden. Allvarlighetsgrad 16-meddelanden anger allmänna fel som kan korrigeras av användaren.

  • Kontrollera slutkoden och DOS ERRORLEVEL variabeln när processen har avslutats. sqlcmd returnerar normalt 0; annars ställs ERRORLEVEL in enligt konfigurationen av -V. Med andra ord bör ERRORLEVEL inte förväntas vara samma värde som felnumret som rapporteras från SQL Server. Felnumret är ett SQL Server-specifikt värde som motsvarar systemfunktionen @@ERROR. ERRORLEVEL är ett sqlcmd--specifikt värde som anger varför sqlcmd avslutades och dess värde påverkas av att ange -b kommandoradsargument.

Att använda -V 16 i kombination med att kontrollera utgångskoden och DOS ERRORLEVEL kan hjälpa till att fånga fel i automatiserade miljöer, särskilt kvalitetsgrindar före en produktversion.