Příkazy v nástroji sqlcmd

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

Nástroj sqlcmd přijímá Transact-SQL příkazy, systémové procedury a soubory skriptů.

Note

Pokud chcete zjistit, která varianta a verze sqlcmd je nainstalována ve vašem systému, přečtěte si téma Kontrola nainstalované verze nástroje sqlcmd. Informace o tom, jak získat sqlcmd, naleznete v tématu Stažení a instalace nástroje sqlcmd.

Kromě příkazů Transact-SQL v rámci sqlcmd použijte následující příkazy:

  • GO [ <count> ]
  • :List
  • [:]RESET
  • :Error
  • [:]ED 1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList 1
  • :XML [ ON | OFF ] 1
  • :Setvar
  • :Listvar

1 Nepodporuje se v Linuxu nebo macOS.

Při použití příkazů sqlcmd mějte na paměti následující body:

  • Všechny příkazy sqlcmd , s výjimkou GO, musí začínat dvojtečka (:).

    Important

    Pokud chcete zachovat zpětnou kompatibilitu se stávajícími skripty osql, některé příkazy fungují bez dvojtečky (označené ).[:]

  • Sqlcmd rozpozná příkazy pouze v případě, že se zobrazí na začátku řádku.

  • Všechny příkazy sqlcmd nerozlišují malá a velká písmena.

  • Každý příkaz musí být na samostatném řádku. Příkaz nemůžete sledovat pomocí příkazu Transact-SQL nebo jiného příkazu.

  • Příkazy se spustí okamžitě. Nejsou vloženy do vyrovnávací paměti spouštění, stejně jako příkazy Transact-SQL.

Úpravy příkazů

[:]ED

Spustí textový editor. Pomocí tohoto editoru můžete upravit aktuální dávku Transact-SQL nebo poslední spuštěnou dávku. Pokud chcete upravit posledně spuštěnou dávku, zadejte ED příkaz bezprostředně po jejím dokončení.

Proměnná SQLCMDEDITOR prostředí definuje textový editor. Výchozí editor je Edit. Pokud chcete změnit editor, nastavte SQLCMDEDITOR proměnnou prostředí. Pokud chcete například nastavit editor na Microsoft Notepad, zadejte následující příkaz:

SET SQLCMDEDITOR=notepad

[:]RESET

Vymaže mezipaměť výroků.

:List

Vytiskne obsah mezipaměti příkazů.

Variables

:Setvar <var> [ "hodnota" ]

Definuje sqlcmd skriptovací proměnné. Skriptovací proměnné mají následující formát: $(VARNAME).

Názvy proměnných nerozlišují malá a velká písmena.

Skriptovací proměnné lze nastavit následujícími způsoby:

  • Implicitně se používá možnost příkazového řádku. Například možnost -l nastaví proměnnou sqlcmd SQLCMDLOGINTIMEOUT.
  • Explicitně pomocí příkazu :Setvar.
  • Před spuštěním příkazu sqlcmd definujete proměnnou prostředí.

Note

Možnost -X zabraňuje předávání proměnných prostředí do sqlcmd.

Pokud má proměnná definovaná pomocí :Setvar a proměnná prostředí stejný název, má přednost proměnná definovaná pomocí :Setvar.

Názvy proměnných nesmí obsahovat mezery.

Názvy proměnných nemohou mít stejný tvar jako výraz proměnné, například $(var).

Pokud řetězcová hodnota skriptovací proměnné obsahuje prázdné mezery, uzavřete hodnotu do uvozovek. Pokud není zadaná hodnota pro skriptovací proměnnou, skriptovací proměnná se zahodí.

:Listvar

Zobrazí seznam skriptovaných proměnných, které jsou aktuálně nastavené.

Note

Zobrazí se pouze skriptovací proměnné nastavené nástrojem sqlcmd a proměnné, které jsou nastaveny pomocí :Setvar příkazu.

Výstupní příkazy

:Chyba <název souboru> | STDERR | STDOUT

Přesměrovat veškerý výstup chyby do souboru určeného názvem souboru, na stderrnebo do stdout. Příkaz :Error se může ve skriptu objevit několikrát. Ve výchozím nastavení směřuje výstup chyby na stderr.

  • filename

    Vytvoří a otevře soubor, který přijímá výstup. Existující soubor je zkrácen na nulu bajtů. Pokud soubor není dostupný z důvodu oprávnění nebo jiných důvodů, výstup se nepřepne a poslední zadaný nebo výchozí cíl zobrazí výstup chyby.

  • STDERR

    Přesměruje výstup chyby do proudu stderr. Pokud je výstup přesměrován, cíl, na který je stream přesměrován, obdrží výstup chyby.

  • STDOUT

    Přesměruje výstup chyby do proudu stdout. Pokud je výstup přesměrován, cíl, na který je stream přesměrován, obdrží výstup chyby.

:Out <název souboru> | STDERR | STDOUT

Vytvoří a přesměruje všechny výsledky dotazu do souboru určeného názvem souboru, na stderrnebo na stdout. Výstup ve výchozím nastavení přejde na stdout. Pokud soubor již existuje, zkrátí se na nulu bajtů. Příkaz :Out se může ve skriptu objevit několikrát.

:Perftrace <název souboru> | STDERR | STDOUT

Vytvoří a přesměruje všechny informace o trasování výkonu do souboru určeného názvem souboru, na stderrnebo na stdout. Ve výchozím nastavení výstup trasování výkonu přejde do stdout. Existující soubor je zkrácen na nulu bajtů. Příkaz :Perftrace se může ve skriptu objevit několikrát.

Příkazy pro řízení provádění

:Při chybě [ ukončit | ignorovat ]

Nastaví akci, která se má provést, když dojde k chybě během skriptu nebo dávkového spuštění.

Když použijete exit tuto možnost, sqlcmd se ukončí s příslušnou chybovou hodnotou.

Při použití možnosti ignore, sqlcmd chybu ignoruje a pokračuje v provádění dávky nebo skriptu. Ve výchozím nastavení sqlcmd vytiskne chybovou zprávu.

[:]QUIT

Způsobí ukončení sqlcmd.

[:]EXIT [ ( příkaz ) ]

Jako návratovou SELECT hodnotu z sqlcmd použijte výsledek příkazu. Pokud je číslo, první sloupec posledního řádku výsledku se převede na 4 bajtové celé číslo (dlouhé). MS-DOS, Linux a macOS předávají nízký bajt nadřazenému procesu nebo chybové úrovni operačního systému. Windows 2000 a novější verze předávají celé 4 bajtové celé číslo. Syntaxe je :EXIT(query).

Například:

:EXIT(SELECT @@ROWCOUNT)

Parametr :EXIT můžete zahrnout také jako součást dávkového souboru. Například na příkazovém řádku zadejte:

sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"

Nástroj sqlcmd odešle na server všechno mezi závorky (()). Pokud systém uložená procedura vybere sadu a vrátí hodnotu, vrátí se pouze výběr. Příkaz :EXIT() s prázdnými závorkami spustí všechny předchozí operace v dávce a poté se ukončí bez návratové hodnoty.

Když zadáte nesprávný dotaz, sqlcmd se ukončí bez návratové hodnoty.

Tady je seznam formátů EXIT:

  • :EXIT

    Nedávku nespustí, okamžitě se ukončí a nevrátí žádnou hodnotu.

  • :EXIT( )

    Spustí dávku a potom se ukončí a nevrátí žádnou hodnotu.

  • :EXIT(query)

    Spustí dávkový proces, který obsahuje dotaz, a poté se ukončí po vrácení výsledků dotazu.

Pokud použijete RAISERROR skript sqlcmd a vyvoláte stav 127, sqlcmd se ukončí a vrátí ID zprávy zpět klientovi. Například:

RAISERROR(50001, 10, 127)

Tato chyba způsobí ukončení skriptu sqlcmd a vrácení zprávy s ID 50001 klientovi.

Návratové hodnoty -1-99 rezervované SQL Serverem a sqlcmd definuje další návratové hodnoty:

Návratová hodnota Description
-100 Před výběrem návratové hodnoty došlo k chybě.
-101 Při výběru návratové hodnoty nebyly nalezeny žádné řádky.
-102 Při výběru návratové hodnoty došlo k chybě převodu.

POKRAČOVAT [počet]

GO signalizuje konec dávky i spuštění všech příkazů Transact-SQL uložených v mezipaměti. Dávka se spouští několikrát jako samostatné dávky. V jedné dávce nemůžete deklarovat proměnnou více než jednou.

Různé příkazy

:r <název souboru>

Parsuje další příkazy Transact-SQL a příkazy sqlcmd ze souboru určeného názvem souboru do mezipaměti příkazů. Sqlcmd přečte název souboru vzhledem k spouštěcímu adresáři.

Pokud soubor obsahuje Transact-SQL příkazy, které nejsou následované GO, je nutné zadat GO na řádek, který následuje :r.

Sqlcmd načte a spustí soubor, jakmile narazí na dávkové ukončení. Můžete vydat několik příkazů :r. Soubor může obsahovat libovolný příkaz sqlcmd , včetně dávkové ukončení GO.

Note

Počet řádků, který se zobrazí v interaktivním režimu, se zvýší o jeden pro každý zjištěný :r příkaz. Příkaz :r se zobrazí ve výstupu příkazu seznamu.

:ServerList

Zobrazí seznam místně nakonfigurovaných serverů a názvů serverů, které v síti vysílají.

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]] [-N[s|m|o]] [-F hostname_in_certificate]

Připojí se k instanci SQL Serveru. Také zavře aktuální připojení.

Important

Příkaz :Connect nefunguje jako implicitní oddělovač dávek. Všechny příkazy Transact-SQL uložené do vyrovnávací paměti v aktuální dávce nejsou spuštěny, dokud není vydán příkaz GO. Pokud používáte více :Connect příkazů bez intervenování GO příkazů, všechny příkazy v vyrovnávací paměti se spouštějí proti poslednímu připojenému serveru, a ne na každém serveru jednotlivě.

  • Možnosti šifrování (-N[s|m|o]):

    Tuto možnost použijte k vyžádání šifrovaného připojení. Pokud nezadáte -N, -Nm je výchozí hodnota (for mandatory). Tato možnost představuje zásadní změnu z SQL Serveru 2022 (16.x) a starších verzí, kde -No (pro optional) je výchozí.

    Value Description
    -Ns Přísné
    -Nm (výchozí) Povinné
    -No Volitelný
  • Název hostitele v certifikátu (-F hostname_in_certificate)

    Určuje jiný, očekávaný běžný název (CN) nebo alternativní název subjektu (SAN) v certifikátu serveru, který se má použít při ověřování certifikátu serveru. Bez této možnosti ověření certifikátu zajistí, že hodnota CN nebo SAN v certifikátu odpovídá názvu serveru, ke kterému se připojujete. Tento parametr lze naplnit, pokud název serveru neodpovídá cn nebo san, například při použití aliasů DNS.

  • Možnosti časového limitu:

    Value Behavior
    0 Počkejte navždy
    n>0 Počkejte n sekund

    Skriptovací proměnná SQLCMDSERVER odráží aktuální aktivní připojení.

    Pokud není zadaný časový limit , je výchozí hodnota proměnné SQLCMDLOGINTIMEOUT.

Pokud zadáte pouze user_name (buď jako možnost, nebo jako proměnná prostředí), nástroj sqlcmd vás vyzve k zadání hesla. Uživatelé nejsou vyzváni, pokud jsou proměnné prostředí SQLCMDUSER nebo SQLCMDPASSWORD nastaveny. Pokud nezadáte možnosti nebo proměnné prostředí, použije se k přihlášení režim ověřování systému Windows. Pokud se například chcete připojit k instanci, instance1, SQL Serveru, myserver, pomocí integrovaného zabezpečení byste použili následující příkaz:

:connect myserver\instance1

Pokud se chcete připojit k výchozí instanci myserver pomocí skriptovaných proměnných, použijte následující nastavení:

:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)

[:]!! command

Spouští příkazy operačního systému. Pokud chcete spustit příkaz operačního systému, spusťte řádek se dvěma vykřičníky (!!) následovanými příkazem operačního systému. Například:

:!! dir

Note

Příkaz běží na počítači, na kterém běží sqlcmd .

:XML [ ON | VYPNUTO ]

Další informace najdete v tématu formát výstupu XML a formát výstupu JSON v tomto článku.

:Help

Zobrazí seznam příkazů sqlcmd spolu s krátkým popisem každého příkazu.

Názvy souborů sqlcmd

Zadejte vstupní soubory sqlcmd pomocí -i možnosti nebo :r příkazu. Zadejte výstupní soubory pomocí volby -o nebo příkazů :Error, :Out a :Perftrace. Při práci s těmito soubory použijte následující pokyny:

  • Použijte samostatné hodnoty názvu souboru pro :Error, :Outa :Perftrace. Pokud použijete stejný název souboru, mohou se příkazy promíchat se vstupy.

  • Pokud zavoláte vstupní soubor umístěný na vzdáleném serveru z sqlcmd v místním počítači a soubor obsahuje cestu k souboru na jednotce, například :Out c:\OutputFile.txt, sqlcmd vytvoří výstupní soubor na místním počítači a ne na vzdáleném serveru.

  • Mezi platné cesty k souborům patří: C:\<filename>, \\<Server>\<Share$>\<filename>a "C:\Some Folder\<file name>". Pokud je v cestě mezera, použijte uvozovky.

  • Každá nová sqlcmd relace přepíše existující soubory se stejnými názvy.

Informační zprávy

sqlcmd vytiskne všechny informační zprávy, které server odesílá. V následujícím příkladu po spuštění příkazu Transact-SQL sqlcmd vytiskne informační zprávu.

Spusťte sqlcmd. Do příkazového řádku sqlcmd zadejte dotaz:

USE AdventureWorks2025;
GO

Když stisknete Enter, sqlcmd vytiskne následující informační zprávu:

Changed database context to 'AdventureWorks2025'.

Formát výstupu dotazů Transact-SQL

sqlcmd nejprve vytiskne záhlaví sloupce, které obsahuje názvy sloupců zadané v seznamu výběrů. Názvy sloupců jsou oddělené znakem SQLCMDCOLSEP. Ve výchozím nastavení je oddělovač tohoto sloupce mezera. Pokud je název sloupce kratší než šířka sloupce, sqlcmd doplní výstup mezerami až do dalšího sloupce.

sqlcmd vypíše oddělovač, který je řadou znaků pomlček. Následující výstup ukazuje příklad.

Spusťte sqlcmd. Do příkazového řádku sqlcmd zadejte dotaz:

USE AdventureWorks2025;

SELECT TOP (2) BusinessEntityID,
               FirstName,
               LastName
FROM Person.Person;
GO

Když stisknete Klávesu Enter, vrátí sqlcmd následující sadu výsledků.

BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)

BusinessEntityID Přestože je sloupec široký jen čtyři znaky, rozšíří se, aby vyhovoval delšímu názvu sloupce. Ve výchozím nastavení sqlcmd ukončí výstup na 80 znaků. Šířku můžete změnit pomocí možnosti -w nebo nastavením skriptovací proměnné SQLCMDCOLWIDTH.

Výstupní formát XML

XML výstup, který je výsledkem klauzule FOR XML, je neformátovaný a v souvislém toku.

Pokud očekáváte výstup XML, použijte následující příkaz: :XML ON.

Note

sqlcmd vrátí chybové zprávy v obvyklém formátu. Chybové zprávy jsou také výstupem v textovém streamu XML ve formátu XML. Pomocí :XML ON, příkaz sqlcmd nezobrazuje informační zprávy.

Chcete-li nastavit režim XML na vypnuto, použijte následující příkaz: :XML OFF.

Příkaz GO by se neměl zobrazit před vydáním příkazu :XML OFF, protože příkaz :XML OFF přepne sqlcmd zpět na výstup orientovaný na řádek.

XML (streamovaná) data a data sady řádků nelze míchat. Pokud nebyl příkaz :XML ON vydán před spuštěním příkazu Transact-SQL, který generuje výstupy XML, je výstup zkomolený. :XML ON Jakmile je příkaz vydán, nemůžete spustit příkazy Transact-SQL, které vypouštějí běžné sady řádků.

Note

Příkaz :XML nepodporuje příkaz SET STATISTICS XML.

Výstupní formát JSON

Pokud očekáváte výstup JSON, použijte následující příkaz: :XML ON. V opačném případě výstup obsahuje název sloupce i text JSON. Tento výstup není platný JSON.

Chcete-li nastavit režim XML na vypnuto, použijte následující příkaz: :XML OFF.

Další informace najdete v tématu výstupní formát XML v tomto článku.

Použijte autentizaci Microsoft Entra

Příklady, které používají ověřování Microsoft Entra:

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30