Dela via


Kommandon i sqlcmd-verktyget

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-databas i Förhandsversion av Microsoft Fabric

Med sqlcmd-verktyget kan du ange Transact-SQL-instruktioner, systemprocedurer och skriptfiler.

Note

Information om vilken variant och version av sqlcmd som är installerad på systemet finns i Kontrollera installerad version av sqlcmd-verktyget. Information om hur du hämtar sqlcmd finns i Ladda ned och installera sqlcmd-verktyget.

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

  • GO [ <count> ]
  • :List
  • [:]RESET
  • :Error
  • [:]ED 1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList 1
  • :XML [ ON | OFF ] 1
  • :Setvar
  • :Listvar

1 Stöds inte i Linux eller macOS.

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 (:).

    Important

    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 exekveringsbufferten som Transact-SQL-satser gör.

Editing commands

[:]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

[:]RESET

Rensar uttalscacheminnet.

:List

Skriver ut innehållet i cacheminnet.

Variables

: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.
  • Definiera en miljövariabel innan du kör sqlcmd.

Note

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.

Note

Endast skriptvariabler som anges av sqlcmd och variabler som anges med kommandot :Setvar visas.

Output commands

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

  • filename

    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 utdata har omdirigerats tar målet som mottar den omdirigerade strömmen emot felutdata.

  • STDOUT

    Växlar felutdata till stdout-strömmen. Om utdata har omdirigerats tar målet som mottar den omdirigerade strömmen 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.

Exekveringskontrollkommandon

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.

[:]QUIT

Orsakar att sqlcmd avslutas.

[:]EXIT [ ( uttalande ) ]

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 vidare den låga byten till den överordnade processen eller operativsystemets felkodsnivå. Windows 2000 och senare versioner skickar heltalet på 4 byte i sin helhet. Syntaxen är :EXIT(query).

For example:

: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. For example:

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:

Return value Description
-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 [count]

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.

Miscellaneous commands

: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 batchterminator har påträffats. Du kan utfärda flera :r kommandon. Filen kan innehålla valfritt sqlcmd-kommando , inklusive batchavslutaren GO.

Note

Antalet rader som visas i interaktivt läge ökas med ett 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.

Timeout options:

Value Behavior
0 Wait forever
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 miljövariablerna eller SQLCMDPASSWORD 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)

[:]!! command

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

:!! dir

Note

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.

:Help

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 -o alternativet eller kommandona :Error, :Outoch :Perftrace . Följande är några riktlinjer för att arbeta med dessa filer:

  • :Error, :Outoch :Perftrace bör använda separata filnamnsvärden . 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änd citattecken.

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

Informational messages

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.

Start 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 den här kolumnavgränsaren ett mellanslag. 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.

Start 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)

BusinessEntityID Även om kolumnen bara är fyra tecken bred expanderas den för att rymma 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 utan ändring, i en kontinuerlig ström.

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

Note

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. :XML ON Om kommandot inte utfärdades innan en Transact-SQL-instruktion som matar ut XML-strömmar körs, är utdata förvrängda. :XML ON När kommandot har utfärdats kan du inte köra Transact-SQL instruktioner som matar ut vanliga raduppsättningar.

Note

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änd 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