Använda sqlcmd
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 är ett kommandoradsverktyg för ad hoc, interaktiv körning av Transact-SQL -instruktioner (T-SQL) och skript och för att automatisera T-SQL-skriptuppgifter. Om du vill använda sqlcmd interaktivt eller skapa skriptfiler för sqlcmdbör du förstå T-SQL. Du kan använda sqlcmd på olika sätt. Till exempel:
Ange T-SQL-instruktioner från kommandotolken. Konsolen returnerar resultatet. Öppna kommandotolken genom att ange
cmd
i sökrutan i Windows och välja kommandotolken för att öppna. I kommandotolken skriver dusqlcmd
följt av en lista med alternativ som du vill använda. En fullständig lista över de alternativ som stöds av sqlcmdfinns i sqlcmd-verktyg.Skicka ett sqlcmd- jobb antingen genom att ange en enda T-SQL-instruktion som ska köras eller genom att peka verktyget på en textfil som innehåller T-SQL-instruktioner som ska köras. Utdata dirigeras till en textfil, men kan också visas i kommandotolken.
SQLCMD-läge i SQL Server Management Studio (SSMS) Frågeredigeraren.
SQL Server Management Objects (SMO).
SQL Server Agent CmdExec-jobb.
Vanliga sqlcmd-alternativ
Serveralternativet (
-S
) identifierar den instans av SQL Server som sqlcmd ansluter till.Autentiseringsalternativ (
-E
,-U
och-P
) anger de autentiseringsuppgifter som sqlcmd använder för att ansluta till instansen av SQL Server.Anmärkning
Alternativet
-E
är standard och behöver inte anges.Indataalternativ (
-Q
,-q
och-i
) identifierar platsen för indata till sqlcmd.Utdataalternativet (
-o
) anger i vilken fil sqlcmd ska placera utdata.
Ansluta till sqlcmd-verktyget
Anslut till en standardinstans med hjälp av Windows-autentisering för att interaktivt köra T-SQL-instruktioner:
sqlcmd -S <ComputerName>
Not
I föregående exempel anges inte
-E
eftersom det är standard och sqlcmd ansluter till standardinstansen med hjälp av Windows-autentisering.Anslut till en namngiven instans med hjälp av Windows-autentisering för att interaktivt köra T-SQL-instruktioner:
sqlcmd -S <ComputerName>\<InstanceName>
eller
sqlcmd -S .\<InstanceName>
Anslut till en namngiven instans med hjälp av Windows-autentisering och ange indata- och utdatafiler:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Anslut till standardinstansen på den lokala datorn med Windows-autentisering, kör en fråga och låt sqlcmd fortsätta köra när frågan är klar.
sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
Anslut till standardinstansen på den lokala datorn med Windows-autentisering, kör en fråga, dirigera utdata till en fil och avsluta sqlcmd när frågan är klar:
sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
Anslut till en namngiven instans med SQL Server-autentisering för att interaktivt köra T-SQL-instruktioner, med sqlcmd fråga efter ett lösenord:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Tips
Om du vill se en lista över de alternativ som stöds av sqlcmd--verktygskörning:
sqlcmd -?
.
Kör Transact-SQL-instruktioner interaktivt med hjälp av sqlcmd
Du kan använda verktyget sqlcmd interaktivt för att köra T-SQL-instruktioner i ett kommandotolkfönster. Om du vill köra T-SQL-instruktioner interaktivt med hjälp av sqlcmdkör du verktyget utan att använda alternativen -Q
, -q
, -Z
eller -i
för att ange indatafiler eller frågor. Till exempel:
sqlcmd -S <ComputerName>\<InstanceName>
När kommandot körs utan indatafiler eller frågor ansluter sqlcmd till den angivna instansen av SQL Server och visar sedan en ny rad med en 1>
följt av ett blinkande understreck med namnet sqlcmd prompt.
1
betyder att detta är den första raden i en T-SQL-instruktion, och sqlcmd uppmaning indikerar starten för T-SQL-instruktionen när du skriver in den.
I sqlcmd prompt kan du skriva både T-SQL-instruktioner och sqlcmd- kommandon, till exempel GO
och EXIT
. Varje T-SQL-uttryck placeras i en buffert som kallas instruktionscache. Dessa instruktioner skickas till SQL Server när du har angett kommandot GO
och trycker på Retur. Om du vill avsluta sqlcmdskriver du EXIT
eller QUIT
i början av en ny rad.
För att rensa uttryckscachen skriver du :RESET
. Genom att skriva Ctrl+C leder till att sqlcmd avslutas.
Ctrl+C- kan också användas för att stoppa körningen av instruktionscacheminnet när ett GO
kommando har utfärdats.
T-SQL-instruktioner som anges i en interaktiv session kan redigeras genom att ange kommandot :ED
och sqlcmd prompt. Redigeraren öppnas och när du har redigerat T-SQL-instruktionen och stängt redigeraren visas den ändrade T-SQL-instruktionen i kommandofönstret. Ange GO
för att köra den reviderade T-SQL-instruktionen.
Angivna strängar
Tecken som omges av citattecken används utan ytterligare förbearbetning, förutom att citattecken kan infogas i en sträng genom att ange två på varandra följande citattecken. SQL Server behandlar den här teckensekvensen som ett citattecken. (Översättningen sker dock på servern.) Skriptvariabler expanderas inte när de visas i en sträng.
Till exempel:
sqlcmd
PRINT "Length: 5"" 7'";
GO
Här är resultatet.
Length: 5" 7'
Strängar som sträcker sig över flera rader
sqlcmd stöder strängar som sträcker sig över flera rader. Följande SELECT
-instruktion sträcker sig till exempel över flera rader men körs som en enda sträng när du har angett GO
och trycker sedan på Retur.
SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO
Interaktivt sqlcmd-exempel
Det här är ett exempel på vad du ser när du kör sqlcmd interaktivt.
När du öppnar kommandotolken finns det en rad som liknar:
C:\Temp\>
Det innebär att mappen C:\Temp\
är den aktuella mappen, och om du anger ett filnamn letar Windows efter filen i mappen.
Skriv sqlcmd för att ansluta till standardinstansen av SQL Server på den lokala datorn och innehållet i kommandotolkens fönster är följande:
C:\Temp>sqlcmd
1>
Det innebär att du har anslutit till instansen av SQL Server och sqlcmd nu är redo att acceptera T-SQL-instruktioner och sqlcmd kommandon. Det blinkande understrecket efter 1>
är sqlcmd prompt som markerar den plats där de instruktioner och kommandon som du skriver visas. Skriv nu USE AdventureWorks2022
och tryck på Retur, och skriv sedan GO
och tryck på Retur. Innehållet i kommandotolkens fönster är följande:
sqlcmd
USE AdventureWorks2022;
GO
Här är resultatet.
Changed database context to 'AdventureWorks2022'.
1>
När du trycker på Retursignalerar det sqlcmd för att starta en ny rad. Om du trycker på Ange när du har angett GO
, signaler sqlcmd för att skicka USE AdventureWorks2022
-instruktionen till SQL Server-instansen.
sqlcmd- returnerar sedan ett meddelande som anger att USE
-instruktionen har slutförts och visar en ny 1>
fråga som en signal för att ange en ny instruktion eller ett nytt kommando.
I följande exempel visas vad kommandotolken innehåller om du skriver en SELECT
-instruktion, en GO
för att köra SELECT
och en EXIT
för att avsluta sqlcmd:
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Här är resultatet.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
När du har genererat resultat återställer sqlcmd prompten för sqlcmd och visar 1>
. Skriv EXIT
i 1>
prompten för att avsluta sessionen. Nu kan du stänga kommandotolken genom att skriva ett annat kommando, EXIT
.
Skapa och göra en förfrågan i en SQL Server-container
Du kan använda sqlcmd (Go) för att skapa en ny instans av SQL Server i en container.
sqlcmd (Go) exponerar en create
-instruktion som gör att du kan ange en containeravbildning och SQL Server-säkerhetskopiering för att snabbt skapa en SQL Server-instans för utveckling, felsökning och analys.
Följande kommando visar hur du ser alla tillgängliga alternativ för att skapa en ny SQL Server-container:
sqlcmd create mssql --help
Följande kommando skapar en ny SQL Server-instans med den senaste versionen av SQL Server 2022 (16.x) och återställer sedan wide world importers-exempeldatabasen:
sqlcmd create mssql --accept-eula --tag 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
När SQL Server-instansen har skapats kan du använda sqlcmd (Go) för att hantera och köra frågor mot den.
Följande kommando bekräftar versionen av instansen som skapades:
sqlcmd query "SELECT @@version"
Följande kommando startar en interaktiv session med den instans som skapades:
sqlcmd query
Följande kommando öppnar Azure Data Studio och ansluter automatiskt till databasen som återställdes under skapandeprocessen:
sqlcmd open ads
Följande kommando visar anslutningssträngar som ska användas för att ansluta till den instans som skapades:
sqlcmd config connection-strings
Följande kommando används för att ta bort containern när den inte längre behövs:
sqlcmd delete
Kör Transact-SQL skriptfiler med sqlcmd
Du kan använda sqlcmd för att köra databasskriptfiler. Skriptfiler är textfiler som innehåller en blandning av T-SQL-instruktioner, sqlcmd-kommandon och skriptvariabler. Mer information om hur man skriptar variabler finns i Använd sqlcmd med skriptvariabler. sqlcmd fungerar med uttryck, kommandon och skriptvariabler i en skriptfil på ett sätt som liknar hur det fungerar med instruktioner och kommandon som anges interaktivt. Den största skillnaden är att sqlcmd läser igenom indatafilen utan paus i stället för att vänta på att en användare ska ange uttryck, kommandon och skriptvariabler.
Det finns olika sätt att skapa databasskriptfiler:
Du kan interaktivt skapa och felsöka en uppsättning T-SQL-instruktioner i SQL Server Management Studio och sedan spara innehållet i frågefönstret som en skriptfil.
Du kan skapa en textfil som innehåller T-SQL-instruktioner med hjälp av en textredigerare, till exempel Anteckningar.
Exempel
A. Köra ett skript med hjälp av sqlcmd
Starta Anteckningar och skriv följande T-SQL-instruktioner:
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Skapa en mapp med namnet MyFolder
och spara sedan skriptet som filen MyScript.sql
i mappen C:\MyFolder
. Ange följande kommando i kommandotolken för att köra skriptet och placera utdata i MyOutput.txt
i MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Här är resultaten.
Changed database context to 'AdventureWorks2022'.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Använda sqlcmd med en dedikerad administrativ anslutning
I följande exempel används sqlcmd för att ansluta till en server som har ett blockeringsproblem med hjälp av den dedikerade administratörsanslutningen (DAC).
C:\Temp\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM `sys.dm_exec_requests` WHERE blocking_session_id <> 0;
2> GO
Här är resultatet.
session_id blocking_session_id
----------- --------------------`
62 64
(1 rows affected)
Använd sqlcmd för att avsluta blockeringsprocessen.
1> KILL 64;
2> GO
C. Använda sqlcmd för att köra en lagrad procedur
I följande exempel visas hur du kör en lagrad procedur med hjälp av sqlcmd. Skapa följande lagrade procedur.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.ContactEmailAddress', 'P') IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress (
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50)
)
AS
SET NOCOUNT ON;
SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF;
GO
Ange följande i sqlcmd prompt:
C:\Temp\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Använda sqlcmd för databasunderhåll
I följande exempel visas hur du använder sqlcmd- för en databasunderhållsaktivitet. Skapa C:\Temp\BackupTemplate.sql
med följande kod.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
Ange följande kod i sqlcmd prompt:
C:\Temp\>sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile C:\Temp\msdb.bak
1> :r C:\Temp\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. Använda sqlcmd för att köra kod på flera instanser
Följande kod i en fil visar ett skript som ansluter till två instanser. Observera GO
före anslutningen till den andra instansen.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Returnera XML-utdata
I följande exempel visas hur XML-utdata returneras oformaterade i en kontinuerlig ström.
C:\Temp\>sqlcmd -d AdventureWorks2022
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Använda sqlcmd i en Windows-skriptfil
Ett sqlcmd- kommando som sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt,
kan köras i en .bat fil tillsammans med VBScript. I det här fallet ska du inte använda interaktiva alternativ.
sqlcmd måste installeras på datorn som kör .bat-filen.
Skapa först följande fyra filer i C:\Temp
:
C:\Temp\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\Temp\goodscript.sql
SELECT 'batch #1'; GO SELECT 'batch #2'; GO
C:\Temp\returnvalue.sql
:exit(select 100)
C:\Temp\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Kör sedan kommandot C:\Temp\windowsscript.bat
i kommandotolken:
C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
G. Använda sqlcmd för att ange kryptering i Azure SQL Database
sqlcmd kan köras på en anslutning till SQL Database-data för att ange kryptering och certifikatförtroende. Det finns två sqlcmd- alternativ:
Växeln
-N
används av klienten för att begära en krypterad anslutning. Det här alternativet motsvarar alternativet ADO.netENCRYPT = true
.Strömbrytaren
-C
används av klienten för att konfigurera så att den implicit litar på servercertifikatet och inte verifierar det. Det här alternativet motsvarar alternativet ADO.netTRUSTSERVERCERTIFICATE = true
.
SQL Database-tjänsten stöder inte alla SET
alternativ som är tillgängliga på en SQL Server-instans. Följande alternativ utlöser ett fel när motsvarande SET
alternativ är inställt på ON
eller OFF
:
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
Följande SET-alternativ utlöser inte undantag men kan inte användas. De är inaktuella:
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Syntax
Följande exempel refererar till fall där inställningarna för den interna SQL Server-klientprovidern är:
ForceProtocolEncryption = False
Trust Server Certificate = No
Anslut med Windows-autentiseringsuppgifter och kryptera kommunikation:
sqlcmd -E -N
Anslut med Windows-autentiseringsuppgifter och förtroendeservercertifikat:
sqlcmd -E -C
Anslut med Windows-autentiseringsuppgifter, kryptera kommunikation och förtroendeservercertifikat:
sqlcmd -E -N -C
Följande exempel refererar till fall där inställningarna för den interna SQL Server-klientprovidern är:
ForceProtocolEncryption = True
TrustServerCertificate = Yes
Anslut med Windows-autentiseringsuppgifter, kryptera kommunikation och förtroendeservercertifikat:
sqlcmd -E
Anslut med Windows-autentiseringsuppgifter, kryptera kommunikation och förtroendeservercertifikat:
sqlcmd -E -N
Anslut med Windows-autentiseringsuppgifter, kryptera kommunikation och förtroendeservercertifikat:
sqlcmd -E -C
Anslut med Windows-autentiseringsuppgifter, kryptera kommunikation och förtroendeservercertifikat:
sqlcmd -E -N -C
Om providern anger ForceProtocolEncryption = True
aktiveras kryptering även om Encrypt=No
i anslutningssträngen.