Použití sqlcmd
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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 zadejtesqlcmd
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
,-U
a-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
,-q
a-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
, -Z
nebo -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í GO
dá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í SELECT
a 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.
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:\Temp
vytvoř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.netENCRYPT = 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.netTRUSTSERVERCERTIFICATE = 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.