Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Sqlcmd-verktyget accepterar 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.
Utöver Transact-SQL-instruktioner i sqlcmd använder du följande kommandon:
GO [ <count> ]:List[:]RESET:Error-
[:]ED1 :Out[:]!!:Perftrace[:]QUIT:Connect[:]EXIT:On Error:r:Help-
:ServerList1 -
: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 börja med ett kolon (:).Important
För att upprätthålla bakåtkompatibilitet med befintliga osql-skript fungerar vissa kommandon utan kolonet (anges av
[:]).sqlcmd identifierar endast kommandon om de visas i början av en rad.
Alla sqlcmd- kommandon är skiftlägesokänsliga.
Varje kommando måste finnas på en separat rad. Du kan inte följa ett kommando med en Transact-SQL-instruktion eller ett annat kommando.
Kommandon körs omedelbart. De placeras inte i exekveringsbufferten som Transact-SQL-satser gör.
Redigera kommandon
[:]ED
Startar textredigeraren. Använd den här redigeraren för att redigera den aktuella Transact-SQL batchen eller den senaste körningsbatchen. Om du vill redigera den senaste körningsbatchen skriver du ED kommandot direkt efter att den senaste batchen har slutfört körningen.
Miljövariabeln SQLCMDEDITOR definierar textredigeraren. 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 följande kommando:
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
-langer till exempel variabelnSQLCMDLOGINTIMEOUTsqlcmd. - 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.
Utdatakommandon
:Fel <filnamn> | STDERR | STDOUT
Omdirigera alla felutdata till filen som anges av filnamnet, till stderreller till stdout. Kommandot :Error kan visas flera gånger i ett skript. Som standard går felutdata till stderr.
filename
Skapar och öppnar en fil som tar emot utdata. En befintlig fil trunkeras till noll byte. Om filen inte är tillgänglig på grund av behörigheter eller andra orsaker växlas inte utdata och det senast angivna målet eller standardmålet tar emot felutdata.
STDERR
Växlar felutdata till
stderr-strömmen. Om utdata omdirigeras får målet som strömmen omdirigeras till felutdata.STDOUT
Växlar felutdata till
stdout-strömmen. Om utdata omdirigeras, tar målet som strömmen dirigeras till emot felmeddelandena.
:Ut <filnamn> | STDERR | STDOUT
Skapar och omdirigerar alla frågeresultat till filen som anges med filnamn, till stderreller till stdout. Som standard går 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 med filnamn, till stderreller till stdout. Som standard går prestandaspårningsutdata till stdout. En befintlig fil trunkeras 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 du använder exit alternativet avslutas sqlcmd med lämpligt felvärde.
När du använder ignore alternativet ignorerar sqlcmd felet och fortsätter att köra batchen eller skriptet. Som standard skriver sqlcmd ut ett felmeddelande.
[:]QUIT
Orsakar att sqlcmd avslutas.
[:]EXIT [ ( uttalande ) ]
Använd resultatet av en SELECT instruktion som returvärde från 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 hela heltalet på 4 byte. 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 som kommer före den i batchen och avslutas sedan utan ett returvärde.
När du anger en felaktig fråga avslutas sqlcmd utan ett returvärde.
Här är en lista över EXIT format:
:EXITKö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 du använder RAISERROR i ett sqlcmd-skript och genererar tillståndet 127 avslutas sqlcmd och returnerar meddelande-ID:t tillbaka 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 är reserverade av SQL Server och sqlcmd definierar extra returvärden:
| Returvärde | 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 omgångar. Du kan inte deklarera en variabel mer än en gång i en enda batch.
Diverse kommandon
:r <filnamn>
Parsar extra Transact-SQL-instruktioner och sqlcmd-kommandon från filen som anges av filnamnet i instruktionscacheminnet. sqlcmd läser filnamnet i förhållande till startkatalogen.
Om filen innehåller Transact-SQL-instruktioner som inte följs av GOmåste du ange GO på raden som följer :r.
sqlcmd läser och kör filen när den har påträffat en batchavslutare. 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 ökar 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.
:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]] [-N[s|m|o]] [-F hostname_in_certificate]
Ansluter till en instans av SQL Server. Stänger även den aktuella anslutningen.
Important
Kommandot :Connect fungerar inte som en implicit batchavgränsare. Alla Transact-SQL-instruktioner som buffrats i den aktuella batchen körs inte förrän ett GO-kommando har utfärdats. Om du använder flera :Connect kommandon utan mellanliggande GO instruktioner körs alla buffrade instruktioner mot den senaste anslutna servern och inte mot varje server individuellt.
Krypteringsalternativ (
-N[s|m|o]):Använd det här alternativet för att begära en krypterad anslutning. Om du inte inkluderar
-N-Nmär (förmandatory) standardvärdet. Det här alternativet är en oförenlig förändring från SQL Server 2022 (16.x) och tidigare versioner, där-No(föroptional) är standard.Value Description -NsSträng -Nm(standardinställning)Mandatory -NoValfritt Värdnamn i certifikat (
-F hostname_in_certificate)Anger ett annat, förväntat eget namn (CN) eller alternativt ämnesnamn (SAN) i servercertifikatet som ska användas under verifieringen av servercertifikatet. Utan det här alternativet säkerställer certifikatverifiering att CN eller SAN i certifikatet matchar servernamnet som du ansluter till. Den här parametern kan fyllas i när servernamnet inte matchar CN eller SAN, till exempel när du använder DNS-alias.
Alternativ för tidsgräns:
Value Behavior 0Vänta för evigt n>0Vänta i n sekunder Den
SQLCMDSERVERskriptvariabeln återspeglar den aktuella aktiva anslutningen.Om timeout inte anges är värdet för variabeln
SQLCMDLOGINTIMEOUTstandard.
Om du bara anger user_name (antingen som ett alternativ eller som en miljövariabel) uppmanar sqlcmd dig 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
För att ansluta till standardinstansen av myserver med 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 operativsystemets kommando. Till exempel:
:!! dir
Note
Kommandot körs på datorn där sqlcmd körs.
:XML [ PÅ | AV ]
Mer information finns i XML-utdataformat och JSON-utdataformat i den här artikeln.
:Help
Visar en lista över sqlcmd-kommandon , tillsammans med en kort beskrivning av varje kommando.
sqlcmd-filnamn
Ange indatafiler för sqlcmd med hjälp av -i alternativet eller :r kommandot. Ange utdatafiler genom att använda alternativet -o eller kommandona :Error, :Out, och :Perftrace. När du arbetar med dessa filer använder du följande riktlinjer:
Använd separata filnamnsvärden för
:Error,:Outoch:Perftrace. Om du använder samma filnamn kan kommandona intermingla indata.Om du anropar en indatafil som finns på en fjärrserver från sqlcmd på en lokal dator och filen innehåller en sökväg till en enhetsfil, till
:Out c:\OutputFile.txtexempel , skapar sqlcmd 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.
Informationsmeddelanden
sqlcmd skriver ut alla informationsmeddelanden som servern skickar. I följande exempel skriver sqlcmd ut ett informationsmeddelande när sqlcmd har kört Transact-SQL-instruktionerna.
Starta sqlcmd. I kommandotolken sqlcmd skriver du frågan:
USE AdventureWorks2025;
GO
När du trycker på Retur skriver sqlcmd ut följande informationsmeddelande:
Changed database context to 'AdventureWorks2025'.
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, padder sqlcmd utdata med blanksteg upp till nästa kolumn.
sqlcmd skriver ut en avgränsarlinje som är en serie strecktecken. Följande utdata visar ett exempel.
Starta sqlcmd. I kommandotolken sqlcmd skriver du frågan:
USE AdventureWorks2025;
SELECT TOP (2) BusinessEntityID,
FirstName,
LastName
FROM Person.Person;
GO
När du trycker på Retur returnerar sqlcmd 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 avslutar sqlcmd utdata med 80 tecken. Du kan ändra den här bredden -w med hjälp av alternativet eller genom att ange SQLCMDCOLWIDTH skriptvariabeln.
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 som använder 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