Delen via


Sqlcmd gebruiken

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-database in Microsoft Fabric

sqlcmd- is een opdrachtregelprogramma voor ad-hoc, interactieve uitvoering van Transact-SQL -instructies en -scripts en voor het automatiseren van T-SQL-scripttaken. Als u sqlcmd interactief wilt gebruiken of scriptbestanden wilt maken voor sqlcmd-, moet u T-SQL begrijpen. U kunt sqlcmd- op verschillende manieren gebruiken. Bijvoorbeeld:

  • Voer T-SQL-instructies in vanaf de opdrachtprompt. De console retourneert de resultaten. Als u een opdrachtpromptvenster wilt openen, voert u cmd in het zoekvak van Windows in en selecteert u opdrachtprompt om te openen. Typ bij de opdrachtprompt sqlcmd gevolgd door een lijst met gewenste opties. Zie sqlcmd-hulpprogrammavoor een volledige lijst met opties die worden ondersteund door sqlcmd-.

  • Dien een sqlcmd--taak in door één T-SQL-instructie op te geven die moet worden uitgevoerd, of door het hulpprogramma naar een tekstbestand met T-SQL-instructies te verwijzen dat moet worden uitgevoerd. De uitvoer wordt omgeleid naar een tekstbestand, maar kan ook worden weergegeven bij de opdrachtprompt.

  • SQLCMD-modus in SQL Server Management Studio (SSMS) Query Editor.

  • SMO (SQL Server Management Objects).

  • SQL Server Agent CmdExec-opdrachten.

Algemene sqlcmd-opties

  • Serveroptie (-S) identificeert het exemplaar van SQL Server waarmee sqlcmd- verbinding maakt.

  • Verificatieopties (-E, -Uen -P) geven de referenties op die sqlcmd gebruikt om verbinding te maken met het exemplaar van SQL Server.

    Notitie

    De optie -E is de standaardinstelling en hoeft niet te worden opgegeven.

  • Invoeropties (-Q, -qen -i) identificeren de locatie van de invoer voor sqlcmd-.

  • Met de uitvoeroptie (-o) wordt het bestand opgegeven waarin sqlcmd- de uitvoer moet plaatsen.

Verbinding maken met het sqlcmd-hulpprogramma

  • Maak verbinding met een standaardexemplaren met behulp van Windows-verificatie om interactief T-SQL-instructies uit te voeren:

    sqlcmd -S <ComputerName>
    

    Notitie

    In het vorige voorbeeld wordt -E niet opgegeven omdat dit de standaardinstelling is en sqlcmd verbinding maakt met het standaardexemplaren met behulp van Windows-verificatie.

  • Maak verbinding met een benoemd exemplaar met behulp van Windows-verificatie om interactief T-SQL-instructies uit te voeren:

    sqlcmd -S <ComputerName>\<InstanceName>
    

    of

    sqlcmd -S .\<InstanceName>
    
  • Maak verbinding met een benoemd exemplaar met behulp van Windows-verificatie en geef invoer- en uitvoerbestanden op:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
    
  • Maak verbinding met de standaardexemplaar op de lokale computer met Windows-verificatie, voer een query uit en houd sqlcmd actief nadat de query is voltooid.

    sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
    
  • Maak verbinding met het standaardexemplaar op de lokale computer met Windows-verificatie, voer een query uit, richt de uitvoer naar een bestand en beëindig de verbinding met sqlcmd nadat de query is voltooid.

    sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
    
  • Maak verbinding met een aangewezen instantie met behulp van SQL Server-verificatie om T-SQL-instructies interactief uit te voeren, waarbij sqlcmd om een wachtwoord vraagt.

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
    

    Tip

    Ga als volgt te werk om een lijst weer te geven van de opties die worden ondersteund door het hulpprogramma sqlcmd: sqlcmd -?.

Transact-SQL-instructies interactief uitvoeren met behulp van sqlcmd

U kunt het hulpprogramma sqlcmd interactief gebruiken om T-SQL-instructies uit te voeren in een opdrachtpromptvenster. Als u T-SQL-instructies interactief wilt uitvoeren met behulp van sqlcmd-, voert u het hulpprogramma uit zonder de -Q, -q, -Zof -i opties te gebruiken om invoerbestanden of query's op te geven. Bijvoorbeeld:

sqlcmd -S <ComputerName>\<InstanceName>

Wanneer de opdracht wordt uitgevoerd zonder invoerbestanden of query's, maakt sqlcmd verbinding met het opgegeven exemplaar van SQL Server en geeft u vervolgens een nieuwe regel weer met een 1> gevolgd door een knipperend onderstrepingsteken met de naam sqlcmd prompt. De 1 geeft aan dat dit de eerste regel van een T-SQL-instructie is en dat de sqlcmd- prompt het punt is waarop de T-SQL-instructie wordt gestart wanneer u deze typt.

Bij de sqlcmd prompt kunt u zowel T-SQL-instructies als sqlcmd opdrachten typen, zoals GO en EXIT. Elke T-SQL-instructie wordt in een buffer geplaatst, de instructiecache. Deze instructies worden naar SQL Server verzonden nadat u de opdracht GO hebt getypt en op Enter-drukt. Als u sqlcmd-wilt afsluiten, typt u EXIT of QUIT aan het begin van een nieuwe regel.

Als u de statementcache wilt wissen, typt u :RESET. Als u Ctrl+C typt, wordt sqlcmd- afgesloten. Ctrl+C- kan ook worden gebruikt om de uitvoering van de instructiecache te stoppen nadat een GO opdracht is uitgegeven.

T-SQL-instructies die in een interactieve sessie worden ingevoerd, kunnen worden bewerkt door de opdracht :ED en de sqlcmd prompt in te voeren. De editor wordt geopend en na het bewerken van de T-SQL-instructie en het sluiten van de editor wordt de herziene T-SQL-instructie weergegeven in het opdrachtvenster. Voer GO in om de herziene T-SQL-instructie uit te voeren.

Geciteerde tekenreeksen

Tekens die tussen aanhalingstekens staan, worden gebruikt zonder extra voorverwerking, behalve dat aanhalingstekens in een tekenreeks kunnen worden ingevoegd door twee opeenvolgende aanhalingstekens in te voeren. SQL Server behandelt deze tekenreeks als één aanhalingsteken. (De vertaling vindt echter plaats op de server.) Scriptvariabelen worden niet uitgevouwen wanneer ze in een tekenreeks worden weergegeven.

Bijvoorbeeld:

sqlcmd
PRINT "Length: 5"" 7'";
GO

Dit is de resultaatset.

Length: 5" 7'

Tekenreeksen die meerdere regels omvatten

sqlcmd- ondersteunt tekenreeksen die meerdere regels omvatten. De volgende SELECT instructie omvat bijvoorbeeld meerdere regels, maar wordt uitgevoerd als één tekenreeks nadat u GO hebt getypt en druk vervolgens op Enter.

SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO

Interactief sqlcmd-voorbeeld

Dit is een voorbeeld van wat u ziet wanneer u sqlcmd- interactief uitvoert.

Wanneer u een opdrachtpromptvenster opent, is er één regel vergelijkbaar met:

C:\Temp\>

Dit betekent dat de map C:\Temp\ de huidige map is en als u een bestandsnaam opgeeft, zoekt Windows naar het bestand in die map.

Typ sqlcmd- om verbinding te maken met het standaardexemplaren van SQL Server op de lokale computer en de inhoud van het opdrachtpromptvenster ziet er als volgt uit:

C:\Temp>sqlcmd
1>

Dit betekent dat u verbinding hebt gemaakt met het exemplaar van SQL Server en sqlcmd nu klaar is om T-SQL-instructies en sqlcmd--opdrachten te accepteren. Het knipperende onderstrepingsteken na de 1> is de sqlcmd prompt waarmee de locatie wordt gemarkeerd waarop de instructies en opdrachten die u typt, worden weergegeven. Typ nu USE AdventureWorks2022 en druk op Enter-en typ GO en druk op Enter-. De inhoud van het opdrachtpromptvenster is als volgt:

sqlcmd
USE AdventureWorks2022;
GO

Hier is het resultaat.

Changed database context to 'AdventureWorks2022'.
1>

Wanneer u op Enterdrukt, geeft dit een signaal aan sqlcmd om een nieuwe regel te starten. Druk op Enter nadat u GOhebt getypt, geeft sqlcmd aan om de USE AdventureWorks2022-instructie naar het exemplaar van SQL Server te verzenden. sqlcmd- retourneert vervolgens een bericht om aan te geven dat de USE-instructie is voltooid en een nieuwe 1> prompt wordt weergegeven als een signaal om een nieuwe instructie of opdracht in te voeren.

In het volgende voorbeeld ziet u wat het opdrachtpromptvenster bevat als u een SELECT instructie typt, een GO om de SELECTuit te voeren en een EXIT om sqlcmd-af te sluiten:

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

Dit is de resultaatset.

BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie

Nadat u uitvoer hebt gegenereerd, wordt de sqlcmd-prompt opnieuw ingesteld door sqlcmd en verschijnt 1>. Typ EXIT bij de 1> prompt om de sessie af te sluiten. U kunt nu het opdrachtpromptvenster sluiten door nog een EXIT opdracht te typen.

Een SQL Server-container maken en er query's op uitvoeren

U kunt sqlcmd (Go) gebruiken om een nieuw exemplaar van SQL Server in een container te maken. sqlcmd (Go) bevat een create-instructie waarmee u een containerinstallatiekopie en SQL Server-back-up kunt opgeven om snel een SQL Server-exemplaar te maken voor ontwikkelings-, foutopsporings- en analysedoeleinden.

Belangrijk

U moet een containerruntime hebben geïnstalleerd, zoals Docker-of Podman-.

De volgende opdracht laat zien hoe u alle beschikbare opties ziet voor het maken van een nieuwe SQL Server-container:

sqlcmd create mssql --help

Met de volgende opdracht maakt u een nieuw SQL Server-exemplaar met de nieuwste versie van SQL Server 2022 (16.x) en herstelt u vervolgens de wide World Importers-voorbeelddatabase:

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

Zodra het SQL Server-exemplaar is gemaakt, kunt u sqlcmd (Go) gebruiken om het te beheren en er query's op uit te voeren.

De volgende opdracht bevestigt de versie van het exemplaar dat is gemaakt:

sqlcmd query "SELECT @@version"

Met de volgende opdracht wordt een interactieve sessie gestart met het exemplaar dat is gemaakt:

sqlcmd query

Met de volgende opdracht wordt Azure Data Studio geopend en wordt automatisch verbinding gemaakt met de database die is hersteld tijdens het maken:

sqlcmd open ads

De volgende opdracht bevat verbindingsreeksen die moeten worden gebruikt om verbinding te maken met het exemplaar dat is gemaakt:

sqlcmd config connection-strings

De volgende opdracht wordt gebruikt om de container te verwijderen wanneer deze niet meer nodig is:

sqlcmd delete

Transact-SQL scriptbestanden uitvoeren met sqlcmd

U kunt sqlcmd- gebruiken om databasescriptbestanden uit te voeren. Scriptbestanden zijn tekstbestanden die een combinatie van T-SQL-instructies bevatten, sqlcmd opdrachten en scriptvariabelen. Zie Sqlcmd gebruiken met scriptvariabelenvoor meer informatie over het uitvoeren van scripts. sqlcmd- werkt met de instructies, opdrachten en scriptvariabelen in een scriptbestand op een manier die vergelijkbaar is met hoe het werkt met instructies en opdrachten die interactief worden ingevoerd. Het belangrijkste verschil is dat sqlcmd het invoerbestand leest zonder te onderbreken in plaats van te wachten tot een gebruiker de instructies, opdrachten en scriptvariabelen invoert.

Er zijn verschillende manieren om databasescriptbestanden te maken:

  • U kunt interactief een set T-SQL-instructies bouwen en fouten opsporen in SQL Server Management Studio en vervolgens de inhoud van het queryvenster opslaan als een scriptbestand.

  • U kunt een tekstbestand maken dat T-SQL-instructies bevat met behulp van een teksteditor, zoals Kladblok.

Voorbeelden

Een. Een script uitvoeren met behulp van sqlcmd

Start Kladblok en typ de volgende T-SQL-instructies:

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

Maak een map met de naam MyFolder en sla het script op als het bestand MyScript.sql in de map C:\MyFolder. Voer de volgende opdracht in bij de opdrachtprompt om het script uit te voeren en plaats de uitvoer in MyOutput.txt in MyFolder:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Dit is de set met resultaten.

Changed database context to 'AdventureWorks2022'.
BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie
(3 rows affected)

B. Sqlcmd gebruiken met een toegewezen beheerverbinding

In het volgende voorbeeld wordt sqlcmd- gebruikt om verbinding te maken met een server met een blokkeringsprobleem met behulp van de toegewezen beheerdersverbinding (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

Dit is de resultatenset.

session_id   blocking_session_id
-----------  --------------------`
62           64
(1 rows affected)

Gebruik sqlcmd- om het blokkeringsproces te beëindigen.

1> KILL 64;
2> GO

C. Sqlcmd gebruiken om een opgeslagen procedure uit te voeren

In het volgende voorbeeld ziet u hoe u een opgeslagen procedure uitvoert met behulp van sqlcmd-. Maak de volgende opgeslagen procedure.

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

Voer bij de sqlcmd- prompt het volgende in:

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. Sqlcmd gebruiken voor databaseonderhoud

In het volgende voorbeeld ziet u hoe u sqlcmd- gebruikt voor een databaseonderhoudstaak. Maak C:\Temp\BackupTemplate.sql met de volgende code.

USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

Voer bij de sqlcmd- prompt de volgende code in:

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. Sqlcmd gebruiken om code uit te voeren op meerdere exemplaren

De volgende code in een bestand toont een script dat verbinding maakt met twee exemplaren. Let op de GO vóór de verbinding met het tweede exemplaar.

:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO

E. XML-uitvoer retourneren

In het volgende voorbeeld ziet u hoe XML-uitvoer niet-opgemaakt wordt geretourneerd in een continue stroom.

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. Sqlcmd gebruiken in een Windows-scriptbestand

Een sqlcmd-opdracht, zoals sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt,, kan samen met VBScript worden uitgevoerd in een .bat-bestand. Gebruik in dit geval geen interactieve opties. sqlcmd- moet zijn geïnstalleerd op de computer waarop het .bat-bestand wordt uitgevoerd.

Maak eerst de volgende vier bestanden in 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\rreturnvalue.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
    

Voer vervolgens bij de opdrachtprompt C:\Temp\windowsscript.batuit:

C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql

SQLCMD returned 100 to the command shell

G. Sqlcmd gebruiken om versleuteling in te stellen in Azure SQL Database

sqlcmd- kan worden uitgevoerd op een verbinding met SQL Database-gegevens om versleuteling en certificaatvertrouwen op te geven. Er zijn twee sqlcmd opties beschikbaar:

  • De -N-switch wordt door de client gebruikt om een versleutelde verbinding aan te vragen. Deze optie is gelijk aan de ADO.net optie ENCRYPT = true.

  • De -C-switch wordt door de client gebruikt om deze impliciet te configureren voor het vertrouwensservercertificaat en niet te valideren. Deze optie is gelijk aan de ADO.net optie TRUSTSERVERCERTIFICATE = true.

De SQL Database-service biedt geen ondersteuning voor alle SET opties die beschikbaar zijn op een SQL Server-exemplaar. De volgende opties veroorzaken een fout wanneer de bijbehorende SET optie is ingesteld op ON of OFF:

  • SET ANSI_DEFAULTS
  • SET ANSI_NULLS
  • SET REMOTE_PROC_TRANSACTIONS
  • SET ANSI_NULL_DEFAULT

De volgende SET-opties genereren geen uitzonderingen, maar kunnen niet worden gebruikt. Ze zijn afgeschaft:

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Syntaxis

De volgende voorbeelden verwijzen naar gevallen waarin de instellingen van de SQL Server Native Client Provider bevatten:

  • ForceProtocolEncryption = False
  • Trust Server Certificate = No

Verbinding maken met behulp van Windows-referenties en communicatie versleutelen:

sqlcmd -E -N

Verbind met Windows-referenties en vertrouw op het servercertificaat.

sqlcmd -E -C

Verbinding maken met windows-referenties, communicatie versleutelen en servercertificaat vertrouwen:

sqlcmd -E -N -C

De volgende voorbeelden verwijzen naar gevallen waarin de instellingen van SQL Server Native Client Provider zijn:

  • ForceProtocolEncryption = True
  • TrustServerCertificate = Yes

Verbinding maken met windows-referenties, communicatie versleutelen en servercertificaat vertrouwen:

sqlcmd -E

Verbinding maken met windows-referenties, communicatie versleutelen en servercertificaat vertrouwen:

sqlcmd -E -N

Verbinding maken met windows-referenties, communicatie versleutelen en servercertificaat vertrouwen:

sqlcmd -E -C

Verbinding maken met windows-referenties, communicatie versleutelen en servercertificaat vertrouwen:

sqlcmd -E -N -C

Als de provider ForceProtocolEncryption = Trueopgeeft, wordt versleuteling ingeschakeld, zelfs wanneer Encrypt=No in de verbindingsreeks staat.