Sdílet prostřednictvím


Nástroj 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ů prostřednictvím různých režimů:

  • Na příkazovém řádku.
  • V Editoru dotazů v režimu SQLCMD.
  • V souboru skriptu systému Windows.
  • V kroku operačního systému (cmd.exe) pracovního kroku agenta SQL Serveru.

Poznámka

I když je ID Microsoft Entra novým názvem proAzure Active Directory (Azure AD), Azure AD zůstává v některých pevně zakódovaných prvcích, jako jsou pole uživatelského rozhraní, zprostředkovatelé připojení, kódy chyb a rutiny, aby se zabránilo narušení existujících prostředí. V tomto článku jsou tyto dva názvy zaměnitelné.

Zjistěte, jakou verzi máte nainstalovanou.

Existují dvě verze sqlcmd:

  • go-mssqldb sqlcmd, někdy také označovaný jako go-sqlcmd. Tato verze je samostatný nástroj, který si můžete stáhnout nezávisle na SQL Serveru.

  • Rozhraní ODBC sqlcmd, dostupné s SQL Serverem nebo nástroji příkazového řádku od společnosti Microsoft, a jako součást balíčku mssql-tools na Linuxu.

Pokud chcete zjistit verzi, kterou jste nainstalovali, spusťte na příkazovém řádku následující příkaz:

sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?

Pokud používáte novou verzi sqlcmd (Go), výstup je podobný následujícímu příkladu:

Version: 1.3.1

Kontrola verze

K určení nainstalované verze můžete použít sqlcmd --version. Měli byste mít nainstalovanou alespoň verzi 1.0.0.

Důležitý

Instalace sqlcmd (Go) prostřednictvím správce balíčků nahrazuje sqlcmd (ODBC) za sqlcmd (Go) v cestě vašeho prostředí. Aby se to projevilo, musí být všechny aktuální relace příkazového řádku zavřené a znovu otevřené. sqlcmd (ODBC) se neodebere a dá se použít zadáním úplné cesty ke spustitelnému souboru. Můžete také aktualizovat proměnnou PATH, aby označila, která má přednost. Pokud to chcete udělat ve Windows 11, otevřete Systémové nastavení a přejděte na O systému > Rozšířené nastavení systému. Když se vlastnosti systému otevře, vyberte tlačítko Proměnné prostředí. V dolní polovině v části Systémové proměnnévyberte Cesta a pak vyberte Upravit. Pokud je umístění sqlcmd (Go) uloženo (C:\Program Files\sqlcmd je výchozí) je uvedeno před C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn, pak se použije sqlcmd (Go). Pořadí můžete zvrátit, aby sqlcmd (ODBC) se stal znovu výchozí volbou.

Stažení a instalace sqlcmd

  • sqlcmd (Go)
  • sqlcmd (ODBC)

sqlcmd (Go) je možné nainstalovat napříč platformami na Microsoft Windows, macOS a Linuxu. Novější verze než 1.6 nemusí být dostupné ve všech správcích balíčků. Pro jejich dostupnost zatím neexistuje žádné odhadované datum.

winget (rozhraní příkazového řádku Správce balíčků systému Windows)

  1. Pokud ho ještě nemáte, nainstalujte klienta Správce balíčků systému Windows.

  2. Spuštěním následujícího příkazu nainstalujte sqlcmd (Go).

    winget install sqlcmd
    

Čokoláda

  1. Pokud ji ještě nemáte, nainstalujte Chocolatey.

  2. Spuštěním následujícího příkazu nainstalujte sqlcmd (Go).

    choco install sqlcmd
    

Přímé stahování

  1. Stáhněte si odpovídající -windows-amd64.zip nebo -windows-arm.zip prostředek z nejnovější verze sqlcmd (Go) z úložiště kódu GitHubu.

  2. Extrahujte soubor sqlcmd.exe ze stažené složky ZIP.

Předinstalováno

Azure Cloud Shell

Nástroj sqlcmd můžete z Azure Cloud Shellu vyzkoušet, protože je ve výchozím nastavení předinstalovaný:

Azure Data Studio

Pokud chcete spouštět příkazy SQLCMD v Azure Data Studio, vyberte Povolit SQLCMD na panelu nástrojů editoru.

SQL Server Management Studio (SSMS)

Chcete-li spustit příkazy SQLCMD v SQL Server Management Studio (SSMS), vyberte SQLCMD režim z rozevíracího seznamu nabídky Dotaz v horní navigaci.

SSMS používá rozhraní Microsoft .NET Framework SqlClient ke spouštění v běžném režimu a v režimu SQLCMD v editoru dotazů . Při spuštění sqlcmd z příkazového řádku sqlcmd používá ovladač ODBC. Vzhledem k tomu, že se můžou použít různé výchozí možnosti, může se při spuštění stejného dotazu v nástroji SSMS v režimu SQLCMD a v nástroji sqlcmd zobrazit jiné chování.

Syntax

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

Podrobnější informace o syntaxi sqlcmd a použití najdete v tématu syntaxe ODBC sqlcmd .

Zásadní změny v sqlcmd (ODBC)

V nástroji sqlcmd (Go) se mění několik přepínačů a chování. Pro většinu up-to- seznam chybějících příznaků kvůli zpětné kompatibilitě, navštivte prioritu implementace back-compat flags diskuzi Na GitHubu.

  • V dřívějších verzích sqlcmd (Go) došlo k dočasnému odebrání přepínače -P a hesla pro ověřování SQL Serveru je možné poskytovat pouze prostřednictvím těchto mechanismů:

    • Proměnná prostředí SQLCMDPASSWORD
    • Příkaz :CONNECT
    • Po zobrazení výzvy může uživatel zadat heslo pro dokončení připojení.
  • -r vyžaduje argument 0 nebo 1.

  • -R přepínač je odstraněn.

  • Přepínač -I je odstraněn. Pokud chcete zakázat chování identifikátoru v uvozovkách, přidejte do skriptů SET QUOTED IDENTIFIER OFF.

  • -N teď má řetězcovou hodnotu, která může být jednou z true, falsenebo disable k určení volby šifrování. (default je stejný jako vynechání parametru)

    • Pokud nejsou k dispozici -N a -C, sqlcmd vyjedná ověřování se serverem bez ověření certifikátu serveru.
    • Pokud je zadán -N, ale -C není poskytnut, sqlcmd vyžaduje ověření certifikátu serveru. Hodnota false pro šifrování by stále mohla vést k šifrování přihlašovacího paketu.
    • Pokud jsou k dispozici -N i -C, použije sqlcmd jejich hodnoty pro vyjednávání šifrování.
    • Další informace o vyjednávání šifrování klienta/serveru najdete v MS-TDS PRELOGIN.
  • -u Vygenerovaný výstupní soubor Unicode má zapsanou značku pořadí bajtů (BOM) UTF-16 Little-Endian.

  • Některá chování, která byla zachována kvůli zachování kompatibility s OSQL, se můžou změnit, například zarovnání záhlaví sloupců u některých datových typů.

  • Všechny příkazy se musí vejít na jeden řádek, i EXIT. Interaktivní režim nekontroluje otevřené závorky ani uvozovky pro příkazy a nezobrazuje výzvu k následným řádkům. Toto chování se liší od verze ODBC, která umožňuje spuštění dotazu EXIT(query) přes několik řádků.

Připojení z nástroje sqlcmd (Go) jsou omezená na připojení TCP. Pojmenované kanály se v tomto okamžiku v ovladači go-mssqldb nepodporují.

Vylepšení

  • :Connect teď má volitelný parametr -G pro výběr jedné z metod ověřování pro Azure SQL Database – SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword. Další informace naleznete v tématu ověřování Microsoft Entra. Pokud -G není k dispozici, použije se integrované zabezpečení nebo ověřování SQL Serveru v závislosti na přítomnosti parametru uživatelského jména -U.

  • Nový parametr příkazového řádku --driver-logging-level umožňuje zobrazovat záznamy z ovladače go-mssqldb. Použijte 64 k zobrazení všech stop.

  • sqlcmd teď můžou tisknout výsledky ve svislém formátu. K nastavení použijte nový přepínač příkazového řádku -F vertical. Proměnná skriptu SQLCMDFORMAT to také řídí.

Možnosti příkazového řádku

-A

Přihlásí se k SQL Serveru pomocí vyhrazeného připojení správce (DAC). Tento typ připojení slouží k řešení potíží se serverem. Toto připojení funguje jenom se serverovými počítači, které podporují DAC. Pokud daC není k dispozici, sqlcmd vygeneruje chybovou zprávu a ukončí se. Další informace o jazyce DAC naleznete v tématu Diagnostické připojení pro správce databáze. Možnost -A není u možnosti -G podporovaná. Při připojování ke službě Azure SQL Database pomocí -Amusíte být správcem na logickém SQL serveru. DaC není k dispozici pro správce Microsoft Entra.

-C

Tuto možnost používá klient ke konfiguraci tak, aby implicitně důvěřoval certifikátu serveru bez ověření. Tato možnost je ekvivalentní možnosti ADO.NET TRUSTSERVERCERTIFICATE = true.

Pro nástroj sqlcmd (Go) platí také následující podmínky:

  • Pokud nejsou k dispozici -N a -C, sqlcmd vyjedná ověřování se serverem bez ověření certifikátu serveru.
  • Pokud je -N zadáno, ale -C není zadáno, sqlcmd vyžaduje ověření certifikátu serveru. Hodnota false pro šifrování by stále mohla vést k šifrování přihlašovacího paketu.
  • Pokud jsou k dispozici -N i -C, použije sqlcmd jejich hodnoty pro vyjednávání šifrování.

-d db_name

Vydá příkaz USE <db_name> při spuštění sqlcmd . Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDDBNAME. Tento parametr určuje počáteční databázi. Výchozí hodnotou je vlastnost výchozí databáze vašeho přihlášení. Pokud databáze neexistuje, vygeneruje se chybová zpráva a sqlcmd ukončí.

-D

Interpretuje název serveru zadaný pro -S jako název DSN místo názvu hostitele. Další informace najdete v tématu podpora DSN v nástrojích sqlcmd a bcp v Připojení pomocí sqlcmd.

Poznámka

Možnost -D je dostupná jenom na klientech s Linuxem a macOS. Na klientech Windows se dříve odkazovalo na zastaralou možnost, která byla odebrána a byla ignorována.

-l časový limit přihlášení

Určuje časový limit v sekundách pro vypršení sqlcmd přihlášení k ovladači ODBC při pokusu o připojení k serveru. Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDLOGINTIMEOUT. Výchozí časový limit pro přihlášení k sqlcmd je 8 sekund. Při použití možnosti -G pro připojení ke službě Azure SQL Database nebo Azure Synapse Analytics a ověření pomocí ID Microsoft Entra se doporučuje hodnota časového limitu alespoň 30 sekund. Časový limit přihlášení musí být číslo mezi 0 a 65534. Pokud zadaná hodnota není číselná nebo nespadá do této oblasti, sqlcmd vygeneruje chybovou zprávu. Hodnota 0 určuje, že časový limit je nekonečný.

-E

Používá důvěryhodné připojení místo použití uživatelského jména a hesla pro přihlášení k SQL Serveru. Ve výchozím nastavení, pokud není -E uvedeno, sqlcmd používá možnost důvěryhodného připojení.

Možnost -E ignoruje možné nastavení proměnných prostředí pro uživatelské jméno a heslo, jako je SQLCMDPASSWORD. Pokud je možnost -E použita společně s možností -U nebo možností -P, vygeneruje se chybová zpráva.

-g

Nastaví šifrování sloupce na Enabled. Další informace naleznete v tématu Always Encrypted. Podporují se jenom hlavní klíče uložené ve službě Windows Certificate Store. Možnost -g vyžaduje alespoň sqlcmd verze 13.1. Pokud chcete zjistit verzi, spusťte sqlcmd -?.

-G

Tuto možnost používá klient při připojování ke službě Azure SQL Database nebo Azure Synapse Analytics k určení ověření uživatele pomocí ověřování Microsoft Entra. Tato možnost nastaví skriptovací proměnnou sqlcmdSQLCMDUSEAAD = true. Možnost -G vyžaduje sqlcmd ve verzi alespoň 13.1. Pokud chcete zjistit verzi, spusťte sqlcmd -?. Další informace najdete v tématu Připojení ke službě SQL Database nebo Azure Synapse Analytics pomocí ověřování Microsoft Entra. Možnost -A není u možnosti -G podporovaná.

Možnost -G platí jenom pro Azure SQL Database a Azure Synapse Analytics.

Interaktivní ověřování Microsoft Entra není v současné době podporováno v Linuxu nebo macOS. Integrované ověřování Microsoft Entra vyžaduje ovladač Microsoft ODBC 17 pro SQL Server verze 17.6.1 nebo vyšší a správně nakonfigurované prostředí Kerberos.

Další informace o ověřování Microsoft Entra naleznete v tématu Ověřování Microsoft Entra v sqlcmd.

-H workstation_name

Název pracovní stanice. Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDWORKSTATION. Název pracovní stanice je uveden ve sloupci hostname zobrazení katalogu sys.sysprocesses a lze jej vrátit pomocí uložené procedury sp_who. Pokud tato možnost není zadaná, je výchozím názvem aktuálního počítače. Tento název lze použít k identifikaci různých relací sqlcmd.

-j

Vytiskne nezpracované chybové zprávy na obrazovku.

-K účel_aplikace

Deklaruje typ úlohy aplikace při připojování k serveru. Jediná aktuálně podporovaná hodnota je ReadOnly. Pokud není zadaný -K, sqlcmd nepodporuje připojení k sekundární replice ve skupině dostupnosti. Další informace najdete v tématu Aktivní sekundární repliky (Vždy dostupné skupiny dostupnosti).

-M multisubnet_failover

Při připojování k posluchači skupiny dostupnosti SQL Serveru nebo instanci clusteru SQL Serveru s podporou převzetí služeb při selhání vždy zadejte -M. -M poskytuje rychlejší detekci a připojení k (aktuálně) aktivnímu serveru. Pokud není zadaný -M, -M je vypnutý. Další informace o naslouchacích procesech , připojení klienta, převzetí služeb při selhání aplikací, vytváření a konfiguraci skupin dostupnosti (SQL Server), clusteringu s podporou převzetí služeb při selhání a skupin dostupnosti AlwaysOn (SQL Server) a aktivních sekundárních sekundárních replik (skupiny dostupnosti AlwaysOn).

-N

Tuto možnost používá klient k vyžádání šifrovaného připojení.

Pro nástroj sqlcmd (Go) nyní -N přijímá řetězcovou hodnotu, která může být jednou z true, falsenebo disable, k určení volby šifrování. (default je stejný jako vynechání parametru):

  • Pokud nejsou k dispozici -N a -C, sqlcmd vyjedná ověřování se serverem bez ověření certifikátu serveru.
  • Pokud je -N poskytnuto, ale -C není, sqlcmd vyžaduje ověření certifikátu serveru. Hodnota false pro šifrování by stále mohla vést k šifrování přihlašovacího paketu.
  • Pokud jsou k dispozici -N i -C, použije sqlcmd jejich hodnoty pro vyjednávání šifrování.

-P heslo

Heslo zadané uživatelem. V heslech se rozlišují malá a velká písmena. Pokud se použije možnost -U a -P možnost se nepoužije a proměnná prostředí SQLCMDPASSWORD nebyla nastavená, sqlcmd vyzve uživatele k zadání hesla. Nedoporučujeme používat heslo s hodnotou null (prázdné), ale můžete zadat heslo null pomocí dvojice souvislých dvojitých uvozovek pro hodnotu parametru ("").

Důležitý

Použití -P by mělo být považováno za nezabezpečené. Nepoužívejte heslo na příkazovém řádku. Případně můžete použít proměnnou prostředí SQLCMDPASSWORD nebo interaktivně zadat heslo tak, že vynecháte možnost -P.

Doporučujeme použít silné heslo.

Výzva k zadání hesla se zobrazí tiskem výzvy k zadání hesla do konzoly následujícím způsobem: Password:

Uživatelský vstup je skrytý. To znamená, že se nic nezobrazí a kurzor zůstane na pozici.

Proměnná prostředí SQLCMDPASSWORD umožňuje nastavit výchozí heslo pro aktuální relaci. Hesla proto nemusí být pevně zakódovaná do dávkových souborů. Následující příklad nejprve nastaví proměnnou SQLCMDPASSWORD na příkazovém řádku a pak přistupuje k nástroji sqlcmd.

Do příkazového řádku zadejte:

SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd

Pokud je kombinace uživatelského jména a hesla nesprávná, vygeneruje se chybová zpráva.

Poznámka

Proměnná prostředí OSQLPASSWORD byla zachována kvůli zpětné kompatibilitě. Proměnná prostředí SQLCMDPASSWORD má přednost před proměnnou prostředí OSQLPASSWORD. To znamená, že sqlcmd a osql lze použít vedle sebe bez zásahu. Staré skripty budou dál fungovat.

Pokud se -P možnost používá s možností -E, vygeneruje se chybová zpráva.

Pokud za možností -P následuje více než jeden argument, vygeneruje se chybová zpráva a program se ukončí.

Heslo obsahující speciální znaky může vygenerovat chybovou zprávu. Při použití -Pbyste měli escapeovat speciální znaky, nebo místo toho použít proměnnou prostředí SQLCMDPASSWORD.

-S [protokol:]server[\instance_název][,port]

Určuje instanci SYSTÉMU SQL Server, ke které se má připojit. Nastaví skriptovací proměnnou sqlcmdSQLCMDSERVER.

Zadejte server_name pro připojení k výchozí instanci SYSTÉMU SQL Server na tomto počítači serveru. Zadejte server_name[\instance_name] pro připojení k pojmenované instanci SQL Serveru na tomto počítači serveru. Pokud není zadaný žádný serverový počítač, sqlcmd se připojí k výchozí instanci SQL Serveru v místním počítači. Tato možnost se vyžaduje při spuštění sqlcmd ze vzdáleného počítače v síti.

protokol může být tcp (TCP/IP), lpc (sdílená paměť) nebo np (pojmenované kanály).

Pokud při spuštění sqlcmd nezadáte server_name[\instance_name], SQL Server vyhledá a použije proměnnou prostředí SQLCMDSERVER.

Poznámka

Proměnná prostředí OSQLSERVER byla zachována kvůli zpětné kompatibilitě. Proměnná prostředí SQLCMDSERVER má přednost před proměnnou prostředí OSQLSERVER. To znamená, že sqlcmd a osql lze použít vedle sebe bez zásahu. Staré skripty budou dál fungovat.

-U login_id

Přihlašovací jméno nebo uživatelské jméno databáze. Pro uživatele databáze s omezením musíte zadat možnost názvu databáze (-d).

Poznámka

Proměnná prostředí OSQLUSER byla zachována kvůli zpětné kompatibilitě. Proměnná prostředí SQLCMDUSER má přednost před proměnnou prostředí OSQLUSER. To znamená, že sqlcmd a osql lze použít vedle sebe bez zásahu. Staré skripty budou dál fungovat.

Pokud nezadáte možnost -U nebo možnost -P, sqlcmd se pokusí připojit pomocí režimu ověřování systému Windows. Ověřování je založeno na účtu systému Windows uživatele, který používá sqlcmd.

Pokud se -U možnost používá s možností -E (popsáno dále v tomto článku), vygeneruje se chybová zpráva. Pokud za možností -U následuje více než jeden argument, vygeneruje se chybová zpráva a program se ukončí.

-z nové_heslo

Změňte heslo:

sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

-Z nové_heslo

Změňte heslo a zavřete:

sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

Možnosti vstupu a výstupu

-f znaková stránka | i:znaková stránka[,o:znaková stránka] | o:znaková stránka[,i:znaková stránka]

Určuje vstupní a výstupní znakové stránky. Číslo znakové stránky je číselná hodnota, která určuje nainstalovanou znakovou stránku systému Windows.

Pravidla převodu kódových stránek:

  • Pokud nejsou zadány žádné znakové stránky, sqlcmd použije aktuální znakovou stránku pro vstupní i výstupní soubory, pokud vstupní soubor není soubor Unicode, v takovém případě není vyžadován žádný převod.

  • sqlcmd automaticky rozpozná vstupní soubory big-endian i little-endian Unicode. Pokud byla zadána možnost -u, je výstup vždy v kódování little-endian Unicode.

  • Pokud není zadán žádný výstupní soubor, je výstupní kódovou stránkou kódová stránka konzole. Tento přístup umožňuje správné zobrazení výstupu v konzole.

  • Předpokládá se, že více vstupních souborů má stejnou znakovou stránku. Vstupní soubory Unicode a jiné než Unicode lze kombinovat.

Zadáním chcp na příkazovém řádku ověřte znakovou stránku cmd.exe.

-i input_file[,input_file2...]

Identifikuje soubor, který obsahuje dávku příkazů Transact-SQL nebo uložených procedur. Může být zadáno více souborů, které se čtou a zpracovávají v uvedeném pořadí. Nepoužívejte mezery mezi názvy souborů. sqlcmd nejprve zkontroluje, jestli existují všechny zadané soubory. Pokud jeden nebo více souborů neexistuje, sqlcmd ukončí. Možnosti -i a -Q/-q se vzájemně vylučují.

Poznámka

Pokud použijete možnost -i následovanou jedním nebo více dalšími parametry, musíte použít mezeru mezi parametrem a hodnotou. Jedná se o známý problém v sqlcmd (Go).

Příklady cest:

-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"

Cesty k souborům, které obsahují mezery, musí být uzavřeny v uvozovkách.

Tuto možnost můžete použít více než jednou:

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o výstupní_soubor

Identifikuje soubor, který přijímá výstup z sqlcmd.

Pokud je zadán -u, output_file je uložen ve formátu Unicode. Pokud název souboru není platný, vygeneruje se chybová zpráva a sqlcmd ukončí. sqlcmd nepodporuje souběžné zápisy více procesů sqlcmd do stejného souboru. Výstup souboru je poškozený nebo nesprávný. Možnost -f je také relevantní pro formáty souborů. Tento soubor se vytvoří, pokud neexistuje. Soubor se stejným názvem z předchozí relace sqlcmd se přepíše. Zadaný soubor není souborem stdout. Pokud je zadaný soubor stdout, tento soubor se nepoužívá.

Příklady cest:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

Cesty k souborům, které obsahují mezery, musí být uzavřeny v uvozovkách.

-r[0 | 1]

Přesměruje výstup chybové zprávy na obrazovku (stderr). Pokud nezadáte parametr nebo zadáte 0, přesměrují se pouze chybové zprávy, které mají úroveň závažnosti 11 nebo vyšší. Pokud zadáte 1, přesměrují se všechny chybové výstupy, včetně PRINT. Tato možnost nemá žádný vliv, pokud používáte -o. Ve výchozím nastavení se zprávy odesílají do stdout.

Poznámka

Pro nástroj sqlcmd (Go) -r vyžaduje argument 0 nebo 1.

-R

Platí pouze pro: ODBC sqlcmd.

Způsobí, že sqlcmd lokalizuje číselné sloupce, měny, data a času načtené z SQL Serveru, na základě národního prostředí klienta. Ve výchozím nastavení se tyto sloupce zobrazují pomocí místního nastavení serveru.

-u

Určuje, že output_file je uložen ve formátu Unicode bez ohledu na formát input_file.

Poznámka

Pro nástroj sqlcmd (Go) je do vygenerovaného výstupního souboru ve formátu Unicode zapsán znak pořadí bajtů UTF-16 Little-Endian (BOM).

Možnosti spouštění dotazů

-e

Zapíše vstupní skripty do standardního výstupního zařízení (stdout).

-Já

platí pouze pro: ODBC sqlcmd.

Nastaví možnost připojení SET QUOTED_IDENTIFIER na ON. Ve výchozím nastavení je nastavená na OFF. Další informace naleznete v tématu SET QUOTED_IDENTIFIER (Transact-SQL).

Poznámka

Pokud chcete zakázat chování uvozených identifikátorů v nástroji sqlcmd (Go), přidejte do svých skriptů SET QUOTED IDENTIFIER OFF.

-q "dotaz na příkazový řádek"

Spustí dotaz při spuštění sqlcmd, ale po dokončení dotazu se sqlcmd neukončí. Dotazy oddělené více středníky jsou možné spustit. Kolem dotazu použijte uvozovky, jak je znázorněno v následujícím příkladu.

Do příkazového řádku zadejte:

sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Důležitý

Nepoužívejte v dotazu ukončovač GO.

Pokud je -b zadána společně s touto možností, sqlcmd se ukončí při chybě. -b je popsáno jinde v tomto článku.

-Q "dotazu na příkazovém řádku"

Spustí dotaz při spuštění sqlcmd a okamžitě ukončí sqlcmd. Dotazy oddělené více středníky je možné spustit.

Kolem dotazu použijte uvozovky, jak je znázorněno v následujícím příkladu.

Do příkazového řádku zadejte:

sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Důležitý

Nepoužívejte v dotazu terminátor GO.

Pokud je -b zadáno společně s touto možností, sqlcmd se ukončí při chybě. -b je popsáno jinde v tomto článku.

-t query_timeout

Určuje počet sekund před časovým limitem příkazu (nebo příkazu Transact-SQL). Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDSTATTIMEOUT. Pokud není zadaná hodnota query_timeout, příkaz nevyprší. query_timeout musí být číslo mezi 1 a 65534. Pokud zadaná hodnota není číselná nebo nespadá do této oblasti, sqlcmd vygeneruje chybovou zprávu.

Poznámka

Skutečná hodnota časového limitu se může lišit od zadané hodnoty query_timeout o několik sekund.

-v var = hodnota [ var = hodnota... ]

Vytvoří sqlcmd skriptovací proměnnou, kterou lze použít ve skriptu sqlcmd. Pokud hodnota obsahuje mezery, uzavřete ji do uvozovek. Můžete zadat více <var>="<value>" hodnot. Pokud v některé z zadaných hodnot dojde k chybám, sqlcmd vygeneruje chybovou zprávu a ukončí se.

sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"

-x

Způsobí, že sqlcmd ignoruje skriptovací proměnné. Tento parametr je užitečný, pokud skript obsahuje mnoho příkazů INSERT, které mohou obsahovat řetězce se stejným formátem jako běžné proměnné, například $(<variable_name>).

Možnosti formátu

-h záhlaví

Určuje počet řádků, které se mají vytisknout mezi záhlavími sloupců. Ve výchozím nastavení se nadpisy vytisknou jednou pro každou sadu výsledků dotazu. Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDHEADERS. Pomocí -1 určete, že se záhlaví nevytisknou. Jakákoli hodnota, která není platná, způsobí, že sqlcmd vygeneruje chybovou zprávu a pak ji ukončí.

-k [1 | 2]

Odebere z výstupu všechny řídicí znaky, například tabulátory a znaky nového řádku. Tento parametr zachová formátování sloupců při vrácení dat.

  • -k odebere řídicí znaky.
  • -k1 nahradí každý řídicí znak mezerou.
  • -k2 nahradí po sobě jdoucí řídicí znaky jednou mezerou.

-s col_separator

Určuje znak oddělovače sloupců. Výchozí hodnota je prázdné místo. Tato možnost nastaví skriptovací proměnnou sqlcmdSQLCMDCOLSEP. Chcete-li použít znaky, které mají zvláštní význam pro operační systém, například ampersand (&) nebo středník (;), uzavře znak do uvozovek ("). Oddělovač sloupců může být libovolný 8bitový znak.

-w šířka_obrazovky

Určuje šířku obrazovky pro výstup. Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDCOLWIDTH. Šířka sloupce musí být číslo větší než 8 a menší než 65536. Pokud zadaná šířka sloupce nepřejde do této oblasti, sqlcmd vygeneruje chybovou zprávu. Výchozí šířka je 80 znaků. Pokud výstupní řádek překročí zadanou šířku sloupce, zalomí se na další řádek.

-W

Tato možnost odebere koncové mezery ze sloupce. Tuto možnost použijte společně s možností -s při přípravě dat, která se mají exportovat do jiné aplikace. Nelze použít s možnostmi -y nebo -Y.

-y variable_length_type_display_width

Nastaví skriptovací proměnnou sqlcmdSQLCMDMAXVARTYPEWIDTH. Výchozí hodnota je 256. Omezuje počet znaků vrácených pro datové typy s velkou délkou:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • uživatelsky definované datové typy (UDT)
  • textové
  • text
  • obrázku

UDT můžou mít pevnou délku v závislosti na implementaci. Pokud je tato pevná délka UDT kratší než display_width, hodnota vráceného UDT nebude ovlivněna. Pokud je však délka delší než display_width, výstup se zkrátí.

Opatrnost

Použijte -y 0 možnost s extrémní opatrností, protože může způsobit významné problémy s výkonem na serveru i v síti v závislosti na velikosti vrácených dat.

-Y fixed_length_type_display_width

Nastaví skriptovací proměnnou sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. Výchozí hodnota je 0 (neomezená). Omezuje počet znaků vrácených pro následující datové typy:

  • char(n), kde 1 <= n<= 8000
  • nchar(n), kde 1 <= n<= 4000
  • varchar(n), kde 1 <= n<= 8000
  • nvarchar(n), kde 1 <= n<= 4000
  • varbinary(n), kde 1 <= n<= 4000
  • sql_variant

Možnosti zasílání zpráv o chybách

-b

Určuje, že sqlcmd ukončí a vrátí DOS ERRORLEVEL hodnotu, když dojde k chybě. Hodnota vrácená do proměnné ERRORLEVEL je 1, pokud chybová zpráva SQL Serveru má úroveň závažnosti větší než 10; v opačném případě je vrácena hodnota 0. Pokud je kromě -bnastavena možnost -V , sqlcmd nehlásí chybu, pokud je úroveň závažnosti nižší než hodnoty nastavené pomocí -V. Dávkové soubory příkazového řádku mohou otestovat hodnotu ERRORLEVEL a správně zpracovat chybu. sqlcmd nehlásí chyby pro úroveň závažnosti 10 (informační zprávy).

Pokud skript sqlcmd obsahuje nesprávný komentář, chybu syntaxe nebo chybí skriptovací proměnná, vrátí se ERRORLEVEL1.

-m error_level

Určuje, které chybové zprávy se odesílají do stdout. Odesílají se zprávy, které mají úroveň závažnosti větší nebo rovna této úrovni. Pokud je tato hodnota nastavena na -1, budou odeslány všechny zprávy včetně informačních zpráv. Mezi -m a -1nejsou povoleny mezery. Například -m-1 je platný a -m -1 není.

Tato možnost také nastaví sqlcmd skriptovací proměnnou SQLCMDERRORLEVEL. Tato proměnná má výchozí hodnotu 0.

-V úroveň závažnosti chyby

Řídí úroveň závažnosti, která se používá k nastavení ERRORLEVEL proměnné. Chybové zprávy, které mají úrovně závažnosti větší nebo rovny této sadě hodnot ERRORLEVEL. Hodnoty, které jsou menší než 0, jsou hlášeny jako 0. Soubory Batch a CMD lze použít k otestování hodnoty proměnné ERRORLEVEL.

Různé možnosti

-a velikost_balíčku

Vyžádá si paket s jinou velikostí. Tato možnost nastaví skriptovací proměnnou sqlcmdSQLCMDPACKETSIZE. packet_size musí být hodnota mezi 512 a 32767. Výchozí hodnota je 4096. Větší velikost paketů může zvýšit výkon spouštění skriptů, které mají velké množství příkazů Transact-SQL mezi příkazy GO. Můžete požádat o větší velikost paketu. Pokud je však požadavek odepřen, sqlcmd použije výchozí nastavení serveru pro velikost paketu.

-c ukončení_dávky

Určuje terminátor dávky. Ve výchozím nastavení se příkazy ukončují a odesílají na SQL Server zadáním výrazu GO na samostatný řádek. Při resetování dávkového ukončování nepoužívejte Transact-SQL rezervovaná klíčová slova ani znaky, které mají pro operační systém zvláštní význam, i když jim předchází zpětné lomítko.

-L[c]

Uvádí seznam místně nakonfigurovaných serverových počítačů a názvy serverových počítačů, které jsou v síti vysílané. Tento parametr nelze použít v kombinaci s jinými parametry. Maximální počet serverových počítačů, které lze uvést, je 3000. Pokud je seznam serverů zkrácen kvůli velikosti vyrovnávací paměti, zobrazí se zpráva upozornění.

Poznámka

Vzhledem k povaze vysílání v sítích nemusí sqlcmd přijímat včasnou odpověď ze všech serverů. Proto se seznam vrácených serverů může pro každé vyvolání této možnosti lišit.

Pokud je zadán volitelný parametr c, zobrazí se výstup bez řádku záhlaví Servers: a každý řádek serveru je uveden bez úvodních mezer. Tato prezentace se označuje jako čistý výstup. Čistý výstup zlepšuje výkon zpracování skriptovacího jazyka.

-p[1]

Vytiskne statistiku výkonu pro každou sadu výsledků. Následující zobrazení je příkladem formátu statistik výkonu:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1  avg       t2 (t3 xacts per sec.)

Kde:

  • x = počet transakcí zpracovaných SQL Serverem.
  • t1 = celkový čas pro všechny transakce.
  • t2 = Průměrná doba pro jednu transakci.
  • t3 = Průměrný počet transakcí za sekundu.

Všechny časy jsou v milisekundách.

Pokud je zadán volitelný parametr 1, výstupní formát statistiky je ve formátu odděleném dvojtečky, který lze snadno importovat do tabulky nebo zpracovávat skriptem.

Pokud je volitelný parametr jinou hodnotou než 1, vygeneruje se chyba a sqlcmd ukončí.

-X[1]

Zakáže příkazy, které můžou ohrozit zabezpečení systému při spuštění sqlcmd z dávkového souboru. Zakázané příkazy jsou stále rozpoznány; sqlcmd zobrazí upozornění a pokračuje. Pokud je zadán volitelný parametr 1, sqlcmd vygeneruje chybovou zprávu a ukončí se. Při použití možnosti -X jsou zakázány následující příkazy:

  • ED
  • !! příkaz

Pokud je zadaná možnost -X, zabrání to předávání proměnných prostředí do sqlcmd . Také zabraňuje spuštění startovacího skriptu určeného pomocí skriptovací proměnné SQLCMDINI. Další informace o sqlcmd skriptovací proměnné naleznete v tématu sqlcmd – použití se skriptovacími proměnnými.

-?

Zobrazí verzi sqlcmd a souhrn syntaxe možností sqlcmd.

Poznámka

V systému macOS místo toho spusťte sqlcmd '-?' (s uvozovkami).

Poznámky

Možnosti se nemusí používat v pořadí uvedeném v oddílu syntaxe.

Poznámka

Pokud použijete možnost -i následovanou jedním nebo více dalšími parametry, musíte použít mezeru mezi parametrem a hodnotou. Jedná se o známý problém v sqlcmd (Go).

Když se vrátí více výsledků, sqlcmd vypíše prázdný řádek mezi jednotlivými sadami výsledků v dávkovém zpracování. Zpráva <x> rows affected se navíc nezobrazí, pokud se nevztahuje na spuštěný příkaz.

Pokud chcete sqlcmd interaktivně použít, zadejte sqlcmd na příkazovém řádku s některou z možností popsaných výše v tomto článku. Další informace najdete v tématu Použití nástroje sqlcmd

Poznámka

Možnosti -l, -Q, -Z nebo -i způsobí, že sqlcmd se po spuštění ukončí.

Celková délka sqlcmd příkazového řádku v příkazovém prostředí (například cmd.exe nebo bash), včetně všech argumentů a rozšířených proměnných, je určena základním operačním systémem.

Priorita proměnných (nízká až vysoká)

  1. Proměnné prostředí na úrovni systému
  2. Proměnné prostředí na úrovni uživatele
  3. Nastavte příkazové prostředí (SET X=Y) v příkazovém řádku před spuštěním sqlcmd
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Poznámka

Pokud chcete zobrazit proměnné prostředí, otevřete v Ovládacích panelechSystéma potom vyberte kartu Upřesněné.

Proměnné pro skriptování sqlcmd

Proměnná Související možnost R/W Výchozí
SQLCMDUSER -U R ""
SQLCMDPASSWORD -P -- ""
SQLCMDSERVER -S R "DefaultLocalInstance"
SQLCMDWORKSTATION -H R "Název_počítače"
SQLCMDDBNAME -d R ""
SQLCMDLOGINTIMEOUT -l R/W "8" (sekundy)
SQLCMDSTATTIMEOUT -t R/W "0" = čekání na neomezenou dobu
SQLCMDHEADERS -h R/W "0"
SQLCMDCOLSEP -s R/W " "
SQLCMDCOLWIDTH -w R/W "0"
SQLCMDPACKETSIZE -a R "4096"
SQLCMDERRORLEVEL -m R/W 0
SQLCMDMAXVARTYPEWIDTH -y R/W "256"
SQLCMDMAXFIXEDTYPEWIDTH -Y R/W "0" = neomezený
SQLCMDEDITOR R/W edit.com
SQLCMDINI R ""
SQLCMDUSEAAD -G R/W ""

SQLCMDUSER, SQLCMDPASSWORDa SQLCMDSERVER jsou nastaveny při použití :Connect.

R označuje, že hodnotu lze nastavit pouze jednou během inicializace programu.

R/W označuje, že hodnotu je možné upravit pomocí příkazu :setvar a následné příkazy jsou ovlivněny novou hodnotou.

příkazy sqlcmd

Kromě příkazů Transact-SQL v rámci sqlcmdjsou k dispozici také následující příkazy:

GO [ počet ]

:List

[:]RESET

:Error

[:]ED

:Out

[:]!!

:Perftrace

[:]QUIT

:Connect

[:]EXIT

:On Error

:r

:Help

:ServerList

:XML [ ON | OFF ]

:Setvar

:Listvar

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 (:).

    Důležitý

    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

[:]RESETOVAT

Vymaže mezipaměť příkazů.

:Seznam

Vytiskne obsah mezipaměti příkazů.

Proměnné

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

  • Definováním proměnné prostředí před spuštěním sqlcmd.

Poznámka

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 prázdné znaky 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é.

Poznámka

Zobrazí se pouze skriptovací proměnné, které jsou nastaveny sqlcmda ty, které jsou nastaveny pomocí příkazu :Setvar.

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.

  • název souboru

    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 tento tok dat přesměrován, cíl, kam byl nasměrován, obdrží výstup chyby.

  • STDOUT

    Přepne výstup chyby do datového proudu stdout. Pokud byl tento přenos přesměrován, cíl, na který byl stream přesměrován, obdrží chybový výstup.

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

[:]PŘESTAT

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

    Nespustí dávku a pak se okamžitě ukončí a nevrátí žádnou hodnotu.

  • :EXIT( )

    Spustí dávku a potom 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 Popis
-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 [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 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ě GOukončovacího příkazu dávky.

Poznámka

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

:SeznamServerů

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

:Connect server_name[\instance_name] [-l vypršení časového limitu] [-U user_name [-P heslo]]

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

Možnosti nastavení časového limitu:

Hodnota Chování
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. Pokud jsou nastavené proměnné prostředí SQLCMDUSER nebo SQLCMDPASSWORD, nezobrazí se uživatelům výzva. 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)

[:]!! příkaz

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

Poznámka

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.

:Pomoc

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, :Out a :Perftrace by měly 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 relaci 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í se jedná o mezeru. 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ělovač, který je řadou 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)

I když je sloupec BusinessEntityID široký jen čtyři znaky, byl rozšířen tak, 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.

Poznámka

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 příkaz :XML ON nebyl vydán před příkazem Transact-SQL, který provádí výstupy datových proudů XML, je výstup zkomolený. Jakmile je příkaz :XML ON vydán, nemůžete spustit příkazy Transact-SQL, které výstupují běžné sady řádků.

Poznámka

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

Osvědčené postupy pro sqlcmd

Následující postupy vám pomůžou maximalizovat zabezpečení a efektivitu.

  • Používejte integrované zabezpečení.

  • Používejte -X[1] v automatizovaných prostředích.

  • Zabezpečte vstupní a výstupní soubory pomocí odpovídajících oprávnění systému souborů.

  • Pro zlepšení výkonu udělejte co nejvíce možného v jedné relaci sqlcmd, namísto ve více relacích.

  • Nastavte hodnoty časového limitu pro dávkové zpracování nebo spouštění dotazů vyšší, než očekáváte, že zpracování dávky nebo dotazu trvá.

Při maximalizaci správnosti vám pomůžou následující postupy:

  • Pomocí -V 16 můžete protokolovat všechny zprávy závažnosti 16. Zprávy závažnosti 16 označují obecné chyby, které může uživatel opravit.

  • Po ukončení procesu zkontrolujte ukončovací kód a DOS ERRORLEVEL proměnnou. sqlcmd vrátí 0 normálně, jinak nastaví ERRORLEVEL podle konfigurace -V. Jinými slovy, ERRORLEVEL by nemělo být očekávané, aby byla stejná jako číslo chyby hlášené z SQL Serveru. Číslo chyby je hodnota specifická pro SQL Server odpovídající systémové funkci @@ERROR. ERRORLEVEL je sqlcmd-specifická hodnota, která označuje, proč byl sqlcmd ukončen, a jeho hodnota je ovlivněna zadáním argumentu příkazového řádku -b.

Použití -V 16 v kombinaci s kontrolou ukončovacího kódu a DOS ERRORLEVEL může pomoct zachytit chyby v automatizovaných prostředích, zejména brány kvality před produkčním vydáním.