Sdílet prostřednictvím


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 umožňuje zadat 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 sqlcmdjsou k dispozici také 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í:

  • Všechny příkazy sqlcmd s výjimkou GOmusí mít předponu dvojtečky (:).

    Important

    Aby se zachovala zpětná kompatibilita se stávajícími skripty osql, některé příkazy se rozpoznají bez dvojtečky označené :.

  • příkazy sqlcmd jsou rozpoznány 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ůže následovat za příkazem Transact-SQL ani jiným příkazem.

  • 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. Tento editor lze použít k úpravě aktuální Transact-SQL dávky nebo poslední spuštěné dávky. Pokud chcete upravit poslední spuštěnou dávku, musí být příkaz ED zadán okamžitě po dokončení poslední dávky.

Textový editor je definován proměnnou prostředí SQLCMDEDITOR. 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, na příkazovém řádku zadejte:

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ěrujte veškerý výstup chyb do souboru specifikovaného jako , nebo na stderr či stdout. Příkaz :Error se může ve skriptu objevit několikrát. Ve výchozím nastavení se výstup chyby odesílá do stderr.

  • filename

    Vytvoří a otevře soubor, který přijímá výstup. Pokud soubor již existuje, zkrátí se na nulu bajtů. Pokud soubor není dostupný kvůli oprávněním nebo jiným důvodům, výstup se nepřepne a odešle se na naposledy zadaný nebo výchozí cíl.

  • STDERR

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

  • STDOUT

    Přesměruje výstup chyby do proudu stdout. Pokud byl výstup přesměrován, cíl, na který se stream přesměruje, 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ázvu souboru, na stderr nebo na stdout. Ve výchozím nastavení se výstup odešle do 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, jehož název je dán jako , nebo na stderr či na stdout. Ve výchozím nastavení se výstup trasování výkonu odesílá do stdout. Pokud soubor již existuje, zkrátí se 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í.

Pokud se použije exit možnost, sqlcmd ukončí s odpovídající chybovou hodnotou.

Pokud se použije možnost ignore, sqlcmd chybu ignoruje a pokračuje v dávkovém zpracování nebo ve skriptu. Ve výchozím nastavení se vytiskne chybová zpráva.

[:]QUIT

Způsobí ukončení sqlcmd.

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

Umožňuje použít výsledek příkazu SELECT jako návratovou hodnotu z sqlcmd. 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é čtyř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(), který nemá nic mezi závorkami, provede vše před ním v dávce a poté se ukončí bez návratové hodnoty.

Pokud je zadán nesprávný dotaz, sqlcmd ukončí bez návratové hodnoty.

Tady je seznam formátů EXIT:

  • :EXIT

    Dávku nespustí, poté se ihned ukončí a nevrátí žádnou hodnotu.

  • :EXIT( )

    Spustí dávkový proces, poté se ukončí a nevrátí žádnou hodnotu.

  • :EXIT(query)

    Spustí dávku, která obsahuje dotaz, a po vrácení výsledků dotazu ji ukončí.

Pokud se RAISERROR používá v skriptu sqlcmd a je vyvolán stav 127, sqlcmd 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 jsou rezervované SQL Serverem a sqlcmd definuje následující 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.

GO [count]

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 sqlcmd příkazy ze souboru určeného názvem do mezipaměti příkazů. název souboru je přečtený vzhledem ke spouštěcímu adresáři, ve kterém byl spuštěn sqlcmd.

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

Soubor se přečte a spustí po nalezení dávkového ukončovače. 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ů zobrazený 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 časový limit] [-U uživatelské jméno [-P heslo]]

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

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 je zadána pouze user_name (buď jako možnost, nebo jako proměnná prostředí), zobrazí se uživateli výzva 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

Spustí 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 (!!) a příkazem operačního systému. Například:

:!! dir

Note

Příkaz se spustí v počítači, na kterém je spuštěný 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

Uvádí příkazy sqlcmd spolu s krátkým popisem každého příkazu.

Názvy souborů sqlcmd

vstupní soubory sqlcmd lze zadat pomocí možnosti -i nebo příkazu :r. Výstupní soubory lze zadat pomocí možnosti -o nebo příkazů :Error, :Out a :Perftrace. Tady jsou některé pokyny pro práci s těmito soubory:

  • :Error, :Outa :Perftrace měl by používat samostatné hodnoty názvu souboru . Pokud se používá stejný název souboru, můžou být vstupy z příkazů intermixované.

  • Pokud je vstupní soubor umístěný na vzdáleném serveru volán pomocí sqlcmd z místního počítače a soubor obsahuje cestu k souboru na disku, například :Out c:\OutputFile.txt, výstupní soubor se vytvoří v 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 odeslané serverem. V následujícím příkladu se po spuštění příkazů Transact-SQL vytiskne informační zpráva.

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

USE AdventureWorks2022;
GO

Když stisknete klávesu ENTER, vytiskne se následující informační zpráva:

Changed database context to 'AdventureWorks2022'.

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, výstup je vycpaný mezerami až do dalšího sloupce.

Za tímto řádkem následuje oddělovací čára, která je sérií pomlček. Následující výstup ukazuje příklad.

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

USE AdventureWorks2022;

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

Když stisknete ENTER, vrátí se následující sada 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í se výstup ukončí na 80 znaků. Tuto šířku lze změnit pomocí možnosti -w nebo nastavením proměnné SQLCMDCOLWIDTH skriptování.

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 není příkaz :XML ON vydán před vykonáním příkazu Transact-SQL, který generuje XML proudy, je výstup zkomolený. :XML ON Jakmile je příkaz vydán, nemůžete spustit příkazy Transact-SQL, které výstupují 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 použití 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