Sdílet prostřednictvím


Použití sqlcmd

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

sqlcmd je nástroj příkazového řádku pro ad hoc interaktivní spouštění příkazů Transact-SQL (T-SQL) a pro automatizaci skriptů T-SQL. Pokud chcete používat sqlcmd interaktivně nebo vytvářet soubory skriptů pro sqlcmd, měli byste rozumět jazyku T-SQL. sqlcmd můžete použít různými způsoby. Například:

  • Zadejte příkazy T-SQL z příkazového řádku. Konzola vrátí výsledky. Chcete-li otevřít okno Příkazového řádku, zadejte do vyhledávacího pole Windows cmd a vyberte Příkazový řádek. Na příkazovém řádku zadejte sqlcmd následovaný seznamem požadovaných možností. Úplný seznam možností, které podporuje sqlcmd, naleznete v tématu nástroj sqlcmd.

  • Odešlete sqlcmd úlohu zadáním jednoho příkazu T-SQL, který se má provést, nebo nasměrováním nástroje na textový soubor, který obsahuje příkazy T-SQL ke spuštění. Výstup se směruje do textového souboru, ale můžete ho také zobrazit na příkazovém řádku.

  • SQLCMD režim v editoru dotazů aplikace SQL Server Management Studio (SSMS).

  • SQL Server Management Objects (Objekty pro správu SQL serveru).

  • Úlohy CmdExec agenta SQL Serveru

Běžné možnosti sqlcmd

  • Možnost serveru (-S) identifikuje instanci SQL Serveru, ke které se sqlcmd připojí.

  • Možnosti ověřování (-E, -Ua -P) určují přihlašovací údaje, které sqlcmd používá pro připojení k instanci SQL Serveru.

    Poznámka

    Možnost -E je výchozí a není nutné ji zadávat.

  • Vstupní možnosti (-Q, -qa -i) identifikují umístění vstupu pro sqlcmd .

  • Výstupní možnost (-o) určuje soubor, do kterého sqlcmd se má vložit jeho výstup.

Připojení k nástroji sqlcmd

  • Připojte se k výchozí instanci pomocí ověřování systému Windows, abyste mohli interaktivně spouštět příkazy T-SQL:

    sqlcmd -S <ComputerName>
    

    Poznámka

    V předchozím příkladu není -E zadán, protože se jedná o výchozí a sqlcmd se připojí k výchozí instanci pomocí ověřování systému Windows.

  • Připojte se k pojmenované instanci pomocí ověřování systému Windows, abyste mohli interaktivně spouštět příkazy T-SQL:

    sqlcmd -S <ComputerName>\<InstanceName>
    

    nebo

    sqlcmd -S .\<InstanceName>
    
  • Připojte se k pojmenované instanci pomocí ověřování systému Windows a zadáním vstupních a výstupních souborů:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
    
  • Připojte se k výchozí instanci na místním počítači pomocí ověřování systému Windows, spusťte dotaz a nechte sqlcmd spuštěné po dokončení dotazu:

    sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
    
  • Připojte se k výchozí instanci na místním počítači pomocí ověřování systému Windows, spusťte dotaz, nasměrujte výstup na soubor a ukončete sqlcmd po dokončení dotazu:

    sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
    
  • Připojte se k pojmenované instanci pomocí ověřování SQL Serveru, abyste mohli interaktivně spouštět příkazy T-SQL, přičemž sqlcmd vás vyzve k zadání hesla:

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

    Spropitné

    Seznam možností podporovaných nástrojem sqlcmd zobrazíte takto: sqlcmd -?.

Interaktivní spouštění příkazů Transact-SQL pomocí sqlcmd

Pomocí nástroje sqlcmd můžete interaktivně spouštět příkazy T-SQL v okně příkazového řádku. Pokud chcete interaktivně spouštět příkazy T-SQL pomocí sqlcmd, spusťte nástroj bez použití -Q, -q, -Znebo -i možnosti pro zadání vstupních souborů nebo dotazů. Například:

sqlcmd -S <ComputerName>\<InstanceName>

Když se příkaz spustí bez vstupních souborů nebo dotazů, sqlcmd se připojí k zadané instanci SQL Serveru a pak zobrazí nový řádek s 1> následovaným blikajícím podtržítkem s názvem sqlcmd prompt. 1 označuje, že se jedná o první řádek příkazu T-SQL a sqlcmd výzva je bod, kdy se příkaz T-SQL spustí při jeho zadání.

Na výzvě sqlcmd můžete zadat jak příkazy T-SQL, tak příkazy sqlcmd , jako jsou GO a EXIT. Každý příkaz T-SQL se vloží do mezipaměti příkazů. Tyto příkazy jsou odeslány na SQL Server po zadání příkazu GO a stisknutí klávesy Enter. Chcete-li ukončit sqlcmd, zadejte EXIT nebo QUIT na začátku nového řádku.

Pokud chcete vymazat mezipaměť příkazů, zadejte :RESET. Stisknutí Ctrl+C způsobí, že se sqlcmd ukončí. Ctrl+C lze také použít k zastavení provádění cache příkazů poté, co byl vydán příkaz GO.

Příkazy T-SQL zadané v interaktivní relaci lze upravit zadáním příkazu :ED a výzvy sqlcmd. Editor se otevře a po úpravě příkazu T-SQL a zavření editoru se v příkazovém okně zobrazí revidovaný příkaz T-SQL. Zadáním GO spusťte revidovaný příkaz T-SQL.

Řetězce v uvozovkách

Znaky uzavřené v uvozovkách se používají bez dalšího předběžného zpracování, s tím rozdílem, že uvozovky lze vložit do řetězce zadáním dvou po sobě jdoucích uvozovek. SQL Server považuje tuto posloupnost znaků za jednu uvozovku. (Překlad však probíhá na serveru.) Skriptovací proměnné nejsou rozšířeny, když se objeví uvnitř řetězce.

Například:

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

Tady je sada výsledků.

Length: 5" 7'

Řetězce, které pokrývají více řádků

sqlcmd podporuje řetězce, které pokrývají více řádků. Například následující příkaz SELECT zahrnuje více řádků, ale po zadání GO se spustí jako jeden řetězec a stiskněte Enter.

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

Příklad interaktivního sqlcmd

Toto je příklad toho, co vidíte při interaktivním spuštění sqlcmd.

Když otevřete okno příkazového řádku, je jeden řádek podobný následujícímu:

C:\Temp\>

To znamená, že složka C:\Temp\ je aktuální složka a pokud zadáte název souboru, systém Windows vyhledá soubor v této složce.

Zadejte sqlcmd pro připojení k výchozí instanci SQL Serveru v místním počítači a obsah okna příkazového řádku jsou následující:

C:\Temp>sqlcmd
1>

To znamená, že jste se připojili k instanci SQL Serveru a sqlcmd je teď připravení přijímat příkazy T-SQL a příkazy sqlcmd. Blikající podtržítko za 1> je výzva sqlcmd, která označuje místo, kde se zobrazují příkazy a dotazy, které zadáte. Nyní zadejte USE AdventureWorks2022 a stiskněte Entera zadejte GO a stiskněte Enter. Obsah okna příkazového řádku je následující:

sqlcmd
USE AdventureWorks2022;
GO

Zde je sada výsledků.

Changed database context to 'AdventureWorks2022'.
1>

Když stisknete Enter, signalizuje sqlcmd, aby se spustil nový řádek. Po stisknutí klávesy Enter po zadání GOdává signál sqlcmd, aby odeslal příkaz USE AdventureWorks2022 do instance SQL Serveru. sqlcmd pak vrátí zprávu na znamení, že příkaz USE byl úspěšně dokončen, a zobrazí novou 1> výzvu jako upozornění pro zadání nového příkazu.

Následující příklad ukazuje, co okno příkazového řádku obsahuje, pokud zadáte příkaz SELECT, GO ke spuštění SELECTa EXIT pro ukončení sqlcmd:

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

Tady jsou výsledky.

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

Po vygenerování výstupu sqlcmd resetuje příkazový řádek sqlcmd a zobrazí 1>. Zadáním EXIT na příkazovém řádku 1> ukončete relaci. Okno příkazového řádku teď můžete zavřít zadáním jiného příkazu EXIT.

Vytvoření a dotazování kontejneru SQL Serveru

K vytvoření nové instance SQL Serveru v kontejneru můžete použít sqlcmd (Go). sqlcmd (Go) zveřejňuje příkaz create, který umožňuje zadat image kontejneru a zálohování SQL Serveru a rychle vytvořit instanci SQL Serveru pro účely vývoje, ladění a analýzy.

Důležitý

Potřebujete mít nainstalovaný runtime pro kontejnery, například Dockernebo Podman.

Následující příkaz ukazuje, jak zobrazit všechny dostupné možnosti pro vytvoření nového kontejneru SQL Serveru:

sqlcmd create mssql --help

Následující příkaz vytvoří novou instanci SQL Serveru pomocí nejnovější verze SQL Serveru 2022 (16.x) a pak obnoví ukázkovou databázi Wide World Importers:

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

Po vytvoření instance SQL Serveru můžete ke správě a dotazování použít sqlcmd (Go).

Následující příkaz potvrdí verzi vytvořené instance:

sqlcmd query "SELECT @@version"

Následující příkaz spustí interaktivní relaci s vytvořenou instancí:

sqlcmd query

Následující příkaz otevře Azure Data Studio a automaticky se připojí k databázi obnovené během procesu vytvoření:

sqlcmd open ads

Následující příkaz uvádí připojovací řetězce, které se mají použít pro připojení k vytvořené instanci:

sqlcmd config connection-strings

Následující příkaz slouží k odebrání kontejneru, když už ho nepotřebujete:

sqlcmd delete

Spuštění Transact-SQL souborů skriptu pomocí sqlcmd

Ke spouštění souborů databázových skriptů můžete použít sqlcmd. Soubory skriptů jsou textové soubory, které obsahují kombinaci příkazů T-SQL, příkazy sqlcmd a skriptovací proměnné. Další informace o skriptování proměnných naleznete v tématu Použití sqlcmd se skriptovacími proměnnými. sqlcmd pracuje s příkazy, příkazy a skriptovacími proměnnými v souboru skriptu podobným způsobem, jako když pracuje s příkazy a příkazy, které jsou zadány interaktivně. Hlavní rozdíl spočívá v tom, že sqlcmd čte vstupní soubor bez pozastavení a nečeká na zadání příkazů, příkazů a skriptovacích proměnných uživatelem.

Soubory skriptů databáze můžete vytvářet různými způsoby:

  • V aplikaci SQL Server Management Studio můžete interaktivně sestavit a ladit sadu příkazů T-SQL a pak obsah okna dotazu uložit jako soubor skriptu.

  • Textový soubor, který obsahuje příkazy T-SQL, můžete vytvořit pomocí textového editoru, například Poznámkového bloku.

Příklady

A. Spuštění skriptu pomocí sqlcmd

Spusťte Poznámkový blok a zadejte následující příkazy T-SQL:

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

Vytvořte složku s názvem MyFolder a uložte skript jako soubor MyScript.sql do složky C:\MyFolder. Zadáním následujícího příkazu na příkazovém řádku spusťte skript a vložte výstup do MyOutput.txt do MyFolder:

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

Zde je sada výsledků.

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

B. Použití sqlcmd s vyhrazeným připojením pro správu

V následujícím příkladu se sqlcmd používá k připojení k serveru, který má problém blokování pomocí vyhrazeného připojení správce (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

Tady je sada výsledků.

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

K ukončení procesu blokování použijte sqlcmd.

1> KILL 64;
2> GO

C. Použití sqlcmd ke spuštění uložené procedury

Následující příklad ukazuje, jak spustit uloženou proceduru pomocí sqlcmd. Vytvořte následující uloženou proceduru.

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

Na příkazovém řádku sqlcmd zadejte následující:

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. Použití sqlcmd pro údržbu databáze

Následující příklad ukazuje, jak použít sqlcmd pro úlohu údržby databáze. Vytvořte C:\Temp\BackupTemplate.sql s následujícím kódem.

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

Do příkazového řádku sqlcmd zadejte následující kód:

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. Použití sqlcmd ke spuštění kódu na více instancích

Následující kód v souboru ukazuje skript, který se připojuje ke dvěma instancím. Všimněte si GO před připojením k druhé instanci.

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

E. Vrácení výstupu XML

Následující příklad ukazuje, jak je výstup XML vrácen neformátovaný ve spojitém streamu.

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. Použití sqlcmd v souboru skriptu systému Windows

Příkaz sqlcmd, například sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt,, lze spustit v souboru .bat společně s jazykem VBScript. V takovém případě nepoužívejte interaktivní možnosti. sqlcmd musí být nainstalován v počítači, který spouští .bat soubor.

Nejprve v C:\Tempvytvořte následující čtyři soubory:

  • 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
    

Potom na příkazovém řádku spusťte C:\Temp\windowsscript.bat:

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

SQLCMD returned 100 to the command shell

G. Použití sqlcmd k nastavení šifrování ve službě Azure SQL Database

sqlcmd lze spustit na připojení k datům služby SQL Database, aby bylo možné určit důvěryhodnost šifrování a certifikátu. K dispozici jsou dvě možnosti pro sqlcmd :

  • Klient používá přepínač -N k vyžádání šifrovaného připojení. Tato možnost je ekvivalentní možnosti ADO.net ENCRYPT = true.

  • Přepínač -C používá klient ke konfiguraci tak, aby implicitně důvěřoval certifikátu serveru a neověřil ho. Tato možnost je ekvivalentní možnosti ADO.net TRUSTSERVERCERTIFICATE = true.

Služba SQL Database nepodporuje všechny možnosti SET dostupné v instanci SQL Serveru. Následující možnosti hlásí chybu, pokud je odpovídající možnost SET nastavená na ON nebo OFF:

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

Následující možnosti SET nevyvolají výjimky, ale nedají se použít. Jsou zastaralé:

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Syntaxe

Následující příklady odkazují na případy, kdy nastavení zprostředkovatele nativního klienta SQL Serveru zahrnuje:

  • ForceProtocolEncryption = False
  • Trust Server Certificate = No

Připojení pomocí přihlašovacích údajů systému Windows a šifrování komunikace:

sqlcmd -E -N

Připojení pomocí přihlašovacích údajů systému Windows a certifikátu serveru důvěryhodnosti:

sqlcmd -E -C

Připojte se pomocí přihlašovacích údajů systému Windows, zašifrujte certifikát serveru pro komunikaci a důvěryhodnost:

sqlcmd -E -N -C

Následující příklady odkazují na případy, kdy nastavení zprostředkovatele nativního klienta SQL Serveru zahrnuje:

  • ForceProtocolEncryption = True
  • TrustServerCertificate = Yes

Připojte se pomocí přihlašovacích údajů systému Windows, zašifrujte certifikát serveru pro komunikaci a důvěryhodnost:

sqlcmd -E

Připojte se pomocí přihlašovacích údajů systému Windows, zašifrujte certifikát serveru pro komunikaci a důvěryhodnost:

sqlcmd -E -N

Připojte se pomocí přihlašovacích údajů systému Windows, zašifrujte certifikát serveru pro komunikaci a důvěryhodnost:

sqlcmd -E -C

Připojte se pomocí přihlašovacích údajů systému Windows, zašifrujte certifikát serveru pro komunikaci a důvěryhodnost:

sqlcmd -E -N -C

Pokud je poskytovatelem specifikováno ForceProtocolEncryption = True, šifrování je povoleno, a to i v případě, že Encrypt=No v připojovacím řetězci.