Dela via


Använda sqlcmd

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 du sqlcmd 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, -Uoch -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, -qoch -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, -Zeller -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 SELECToch 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.

Viktig

Du behöver en containerkörning installerad, till exempel Dockereller Podman.

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.bati 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.net ENCRYPT = 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.net TRUSTSERVERCERTIFICATE = 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 = Trueaktiveras kryptering även om Encrypt=No i anslutningssträngen.