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 skriptů. Automatizuje také skriptovací úlohy T-SQL. Pokud chcete sqlcmd používat 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 rozhraní příkazového řádku (CLI). Konzola vrátí výsledky.

    Note

    Ve Windows můžete otevřít okno příkazového řádku pomocí cmd vyhledávacího pole Windows a vybrat příkazový řádek. V systému macOS a Linux můžete použít integrovaný emulátor terminálu.

    Napište sqlcmd do konzole, poté zadejte seznam požadovaných možností a nakonec stiskněte Enter. Úplný seznam možností, které sqlcmd podporuje, naleznete v nástroji 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 v konzole.

  • Režim SQLCMD v aplikaci 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.

    Note

    Tato 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, ve kterém sqlcmd zapíše svůj 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>
    

    Note

    V předchozím příkladu není zadaný, -E protože se jedná o výchozí hodnotu. 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>
    

    or

    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 AdventureWorks2025.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 AdventureWorks2025.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>
    

    Tip

    Pokud chcete zobrazit seznam možností, které nástroj sqlcmd podporuje, spusťte: sqlcmd -?.

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

Pomocí nástroje sqlcmd interaktivně spusťte příkazy T-SQL v konzole. 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ž spustíte příkaz bez vstupních souborů nebo dotazů, sqlcmd se připojí k zadané instanci SQL Serveru. Potom zobrazí nový řádek s 1> a blikajícím podtržítkem nazvaným výzva sqlcmd. 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 přejde do vyrovnávací paměti označované jako mezipaměť 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. Při psaní ctrl+C dojde k ukončení příkazu sqlcmd . Ctrl+Jazyk C lze také použít k zastavení provádění mezipaměti příkazů po GO příkazu.

:ED Zadáním příkazu na příkazovém řádku sqlcmd upravte příkazy T-SQL. 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

Můžete použít znaky, které jsou uzavřeny v uvozovkách bez dalšího předběžného zpracování, s tím rozdílem, že do řetězce můžete vložit uvozovky 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 soubor 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

Tento příklad ukazuje, co vidíte při interaktivním spuštění sqlcmd .

Když otevřete okno konzoly ve Windows, může se zobrazit výstup podobný následujícímu příkladu:

C:\Temp\>

Tento řádek znamená, že složka C:\Temp\ je aktuální složkou. Pokud zadáte název souboru, operační systém 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. Obsah okna konzoly je následující:

C:\Temp>sqlcmd
1>

Tento výstup znamená, že jste připojeni k instanci SQL Serveru. Sqlcmd je nyní připraven přijímat příkazy T-SQL a příkazy sqlcmd . Blikající podtržítko za 1> je výzva sqlcmd. Označuje umístění, ve kterém se zobrazují příkazy a příkazy, které zadáte. Teď zadejte USE AdventureWorks2025 a stiskněte Enter. Pak zadejte GO a stiskněte Enter. Obsah konzoly je následující:

sqlcmd
USE AdventureWorks2025;
GO

Tady je soubor výsledků.

Changed database context to 'AdventureWorks2025'.
1>

Když stisknete Enter, signalizuje sqlcmd, aby se spustil nový řádek. Stisknutím klávesy Enter po zadání GO dáte pokyn sqlcmd k odeslání USE AdventureWorks2025 příkazu k instanci serveru SQL. sqlcmd pak vrátí zprávu, která indikuje, že USE příkaz byl úspěšně dokončen. Zobrazí nový 1> příkaz jako signál pro zadání nového příkazu nebo příkazu.

Následující příklad ukazuje, co konzola obsahuje, pokud zadáte příkaz SELECT, GO ke spuštění SELECT a EXIT k ukončení sqlcmd:

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

Tady je soubor výsledků.

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

Jakmile sqlcmd vygeneruje výstup, resetuje příkazový řádek sqlcmd a zobrazí 1>. Zadejte EXIT na výzvu 1> pro ukončení relace. Okno konzoly teď můžete zavřít zadáním jiného EXIT příkazu a klávesy Enter.

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 create příkaz pro zadání image kontejneru a zálohování SQL Serveru. Můžete rychle vytvořit instanci SQL Serveru pro účely vývoje, ladění a analýzy.

Important

Potřebujete nainstalovaný modul runtime kontejneru, například Docker nebo 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 2025 (17.x) a pak obnoví ukázkovou databázi Wide World Importers:

sqlcmd create mssql --accept-eula --tag 2025-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 použijte ke správě a dotazování sqlcmd (Go).

Následující příkaz potvrdí verzi instance, kterou jste vytvořili:

sqlcmd query "SELECT @@version"

Následující příkaz spustí interaktivní relaci s instancí, kterou jste vytvořili:

sqlcmd query

Následující příkaz zobrazí seznam připojovacích řetězců, které se mají použít pro připojení k instanci, kterou jste vytvořili:

sqlcmd config connection-strings

Pokud už kontejner nepotřebujete, odeberte ho pomocí následujícího příkazu:

sqlcmd delete

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

Ke spuštění souborů databázových skriptů použijte 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í proměnné v souboru skriptu podobným způsobem, jako funguje s příkazy a příkazy, které zadáte 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 databázových skriptů můžete vytvářet různými způsoby:

  • Interaktivně sestavovat a ladit sadu příkazů T-SQL v aplikaci SQL Server Management Studio a potom uložte obsah okna dotazu jako soubor skriptu.

  • Pomocí textového editoru, například Poznámkového bloku, vytvořte textový soubor, který obsahuje příkazy T-SQL.

Examples

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

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

USE AdventureWorks2025;
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 v konzole spusťte skript a vložte výstup do MyOutput.txtMyFolder:

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

Tady je soubor výsledků.

Changed database context to 'AdventureWorks2025'.
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

Následující příklad používá sqlcmd pro 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 soubor 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 AdventureWorks2025;
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í příkaz:

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. Před připojením ke druhé instanci si všimněte GO .

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

F. Vrácení výstupu XML

Následující příklad ukazuje, jak výstup XML vrací jako neformátovaný průběžný datový proud.

C:\Temp\>sqlcmd -d AdventureWorks2025
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,

G. 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, můžete spustit v .bat souboru spolu s jazykem VBScript. V tomto scénáři nepoužívejte interaktivní možnosti. Nástroj sqlcmd musí být nainstalován v počítači, na kterém je soubor .bat spuštěn.

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
    

Pak spusťte C:\Temp\windowsscript.bat konzolu:

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

SQLCMD returned 100 to the command shell

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

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

  • Přepínač -N je žádost klienta o šifrované připojení. Tato možnost je ekvivalentní možnosti ADO.NET ENCRYPT = true.

  • Přepínač -C nakonfiguruje klienta 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

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

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Syntax

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řipojení pomocí přihlašovacích údajů systému Windows, šifrování komunikace a certifikátu serveru důvěryhodnosti:

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řipojení pomocí přihlašovacích údajů systému Windows, šifrování komunikace a certifikátu serveru důvěryhodnosti:

sqlcmd -E

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

sqlcmd -E -N

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

sqlcmd -E -C

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

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.