Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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.
Note
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é.
Varianty sqlcmd
Existují dvě varianty sqlcmd:
sqlcmd (Go):
go-mssqldbsqlcmd založený na Go, někdy označovaný jako go-sqlcmd. Tato verze je samostatný nástroj, který si můžete stáhnout nezávisle na SQL Serveru. Běží ve Windows, macOS, Linuxu a v kontejnerech.<|vq_3487|>sqlcmd (ODBC): Platformně kompatibilní
sqlcmd , založený na rozhraní ODBC, dostupný se SQL Serverem nebo příkazovými nástroji Microsoftu a součástí balíčku na Linuxu. Běží také ve Windows, macOS, Linuxu a v kontejnerech.
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.
Podpora TDS 8.0
SQL Server 2025 (17.x) zavádí podporu TDS 8.0 pro nástroj sqlcmd .
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 nejaktuálnější seznam chybějících příznaků kvůli zpětné kompatibilitě navštivte diskuzi 'Prioritizace implementace zpětně kompatibilních příznaků' na GitHubu.
V dřívějších verzích sqlcmd (Go) došlo k dočasnému odebrání přepínače
-Pa 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í.
- Proměnná prostředí
-rvyžaduje argument0nebo1.-Rpřepínač je odstraněn.-Ipřepínač je odstraněn. Pokud chcete zakázat chování identifikátoru v uvozovkách, přidejte do skriptůSET QUOTED IDENTIFIER OFF.-Npřebírá řetězcovou hodnotu, která může být jednou ztrue,falsenebodisablezadat volbu šifrování. (defaultje stejný jako vynechání parametru)- Pokud nejsou k dispozici
-Na-C, sqlcmd vyjedná ověřování se serverem bez ověření certifikátu serveru. - Pokud je zadán
-N, ale-Cnení poskytnut, sqlcmd vyžaduje ověření certifikátu serveru. Hodnotafalsepro šifrování by stále mohla vést k šifrování přihlašovacího paketu. - Pokud jsou k dispozici
-Ni-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.
Important
V SYSTÉMU SQL Server 2025 (17.x)
-Nmůže býto(prooptional),m(promandatory, výchozí) nebos(prostrict). Pokud nezadáte-N,-Nmje výchozí hodnota (formandatory). Jedná se o zásadní změnu z SQL Serveru 2022 (16.x) a starších verzí.- Pokud nejsou k dispozici
-uVygenerovaný 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
OSQLněkterými datovými typy, se můžou změnit, například zarovnání záhlaví sloupců.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í dotazuEXIT(query)přes několik řádků.
Připojení z nástroje sqlcmd (Go) jsou omezená na připojení TCP. Pojmenované kanály se v ovladači go-mssqldb momentálně nepodporují.
Enhancements
:Connectmá volitelný-Gparametr 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í pomocí id Microsoft Entra v sqlcmd. Pokud-Gnení 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.Parametr příkazového řádku
--driver-logging-levelumožňuje zobrazit trasování z ovladačego-mssqldb. Použijte64k zobrazení všech stop.Sqlcmd (Go) může tisknout výsledky ve svislém formátu. K nastavení použijte přepínač příkazového
-F verticalřádku. Proměnná skriptuSQLCMDFORMATto také řídí.Note
To se liší od
-Fpřepínače pro sqlcmd (ODBC), který se používá s-Nk zadání názvu hostitele v certifikátu.
Možnosti příkazového řádku
Následující tabulka uvádí možnosti příkazového řádku dostupné v nástroji sqlcmd a operační systémy, které podporují.
Možnosti související s přihlášením
-A
Platí pouze pro: Windows. Linux a macOS se nepodporují.
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.
Note
Informace o tom, jak vytvořit vyhrazené připojení správce (DAC) v systému macOS nebo Linux, najdete v tématu Pokyny pro programování.
-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
-Na-C, sqlcmd vyjedná ověřování se serverem bez ověření certifikátu serveru. - Pokud je zadán
-N, ale-Cnení poskytnut, sqlcmd vyžaduje ověření certifikátu serveru. Hodnotafalsepro šifrování by stále mohla vést k šifrování přihlašovacího paketu. - Pokud jsou k dispozici
-Ni-C, použije sqlcmd jejich hodnoty pro vyjednávání šifrování.
-d db_name
Při spuštění USE <db_name> se vydá příkaz . 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 sqlcmd a bcp.
Note
Možnost -D je dostupná jenom na klientech s Linuxem a macOS. V klientech s Windows odkazuje na zastaralou možnost, která byla odebrána, a je 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 k připojení ke službě Azure SQL Database nebo Azure Synapse Analytics a ověření pomocí Microsoft Entra ID se doporučuje nastavit vypršení časového limitu na 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.
Note
Další informace o vytváření důvěryhodných připojení, která používají integrované ověřování z klienta systému Linux nebo macOS, naleznete v tématu Použití integrovaného ověřování.
-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í, že se uživatel ověřuje pomocí ověřování Microsoft Entra. Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDUSEAAD = true. Možnost -G vyžaduje alespoň sqlcmd verze 13.1. Pokud chcete zjistit verzi, spusťte sqlcmd -?. Další informace najdete v tématu Ověřování Microsoft Entra pro Azure SQL. 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 stažení ovladače ODBC 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í pomocí Microsoft Entra ID 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 application_intent
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 Přenesení úlohy pouze pro čtení na sekundární replikát skupiny dostupnosti Always On.
Note
-K V SUSE Linux Enterprise Serveru (SLES) se nepodporuje. Můžete však zadat klíčové slovo ApplicationIntent=ReadOnly v souboru DSN, který je předán sqlcmd. Další informace naleznete v tématu Podpora dsN v sqlcmd a bcp dále v tomto článku.
Další informace najdete v tématu Vysoká dostupnost a zotavení po havárii v Linuxu a macOS.
-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 najdete tady:
- Připojení k posluchači skupiny dostupnosti Always On
- Referenční informace o vytváření a konfiguraci skupin dostupnosti AlwaysOn
- Clustrování s podporou převzetí služeb při selhání a Skupiny dostupnosti Always On (SQL Server)
- Přesměrování pracovní zátěže pouze pro čtení na sekundární repliku skupiny dostupnosti Always On
Note
-M V SUSE Linux Enterprise Serveru (SLES) se nepodporuje. Můžete však zadat klíčové slovo MultiSubnetFailover=Yes v souboru DSN, který je předán sqlcmd. Další informace naleznete v tématu Podpora dsN v sqlcmd a bcp dále v tomto článku.
Další informace najdete v tématu Vysoká dostupnost a zotavení po havárii v Linuxu a macOS.
-N[s|m|o]
Tuto možnost používá klient k vyžádání šifrovaného připojení.
-N může být o (pro optional), m (pro mandatory, výchozí) nebo s (pro strict). Pokud nezadáte -N, -Nm je výchozí hodnota (for mandatory). Jedná se o zásadní změnu z SQL Serveru 2022 (16.x) a starších verzí, kde -No je výchozí.
Pro nástroj sqlcmd (Go) přijímá řetězcovou hodnotu, která může být jedním z -N, true, nebo false, a tím zadává volbu šifrování. (default je stejný jako vynechání parametru):
Pokud nejsou k dispozici
-Na-C, sqlcmd vyjedná ověřování se serverem bez ověření certifikátu serveru.Pokud je zadán
-N, ale-Cnení poskytnut, sqlcmd vyžaduje ověření certifikátu serveru. Hodnotafalsepro šifrování by stále mohla vést k šifrování přihlašovacího paketu.Pokud jsou k dispozici
-Ni-C, použije sqlcmd jejich hodnoty pro vyjednávání šifrování.V sqlcmd (ODBC) použijte
-Fk zadání názvu hostitele v certifikátu. Například:sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.comNote
To se liší od
-Fpřepínače sqlcmd (Go), který slouží k tisku výsledků ve svislém formátu.
-P heslo
Heslo zadané uživatelem. V heslech se rozlišují malá a velká písmena.
-U Pokud se tato možnost použije, -P možnost se nepoužije a SQLCMDPASSWORD proměnná prostředí není 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 ("").
Important
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 vám 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.
Na příkazovém řádku zadejte následující příkaz. Nahraďte <password> platným heslem.
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
Pokud je kombinace uživatelského jména a hesla nesprávná, vygeneruje se chybová zpráva.
Note
Proměnná OSQLPASSWORD prostředí se uchovává 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.
Při použití s možností -G bez -U na Linuxu a macOS -P určuje soubor, který obsahuje přístupový token (v17.8+). Soubor tokenu by měl být ve formátu UTF-16LE (bez BOM).
Přístupové tokeny lze získat různými metodami. Musíte zajistit, aby přístupový token byl správný bajt pro bajt, protože se odesílá as-is. Následuje příklad příkazu, který získá přístupový token. Tento příkaz používá příkazy Azure CLI a Linuxu a uloží ho do souboru ve správném formátu. Pokud výchozí kódování vašeho systému nebo terminálu není ASCII nebo UTF-8, možná budete muset upravit iconv možnosti. Ujistěte se, že výsledný soubor pečlivě zabezpečíte a odstraníte ho, když už ho nepotřebujete.
az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
-S [protokol:]server[\instance_name][,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.
Note
Proměnná OSQLSERVER prostředí se uchovává 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.
Ovladač ODBC v Linuxu a macOS vyžaduje -S. Jediná platná hodnota protokolu je tcp.
-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).
Note
Proměnná OSQLUSER prostředí se uchovává 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 new_password
Změňte heslo. Nahraďte <oldpassword> starým heslem a <newpassword> novým heslem.
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
-Z new_password
Změňte heslo a odhlaste se. Nahraďte <oldpassword> starým heslem a <newpassword> novým heslem.
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
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 s kódováním "big-endian" i "little-endian" Unicode. Pokud je tato
-umožnost zadána, je výstup vždy ve formátu Unicode little-endian.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.
Note
Číslo znakové stránky v Linuxu je číselná hodnota, která určuje nainstalovanou znakovou stránku Linuxu (k dispozici od verze 17.5.1.1).
-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.
-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í.
Note
Pokud použijete -i možnost 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 lze 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.
Note
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.
Note
Na Linuxu a macOS -R aktuálně používá formátování pouze pro angličtinu (USA) en_US.
-u
Určuje, že output_file je uložen ve formátu Unicode bez ohledu na formát input_file.
Note
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).
-I
Platí pouze pro: ODBC sqlcmd.
Nastaví možnost připojení SET QUOTED_IDENTIFIER na ON. Výchozí nastavení je OFF. Další informace naleznete v tématu SET QUOTED_IDENTIFIER.
Note
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 sqlcmd neukončí. Je možné spustit více dotazů oddělených středníkem. 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;"
Important
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 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;"
Important
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.
-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.
Note
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... ]
Platí pouze pro: Windows. Linux a macOS se nepodporují.
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 headers
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.
-
-kodstraní řídicí znaky. -
-k1nahradí každý řídicí znak mezerou. -
-k2nahradí 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í sqlcmd skriptovací proměnnou SQLCMDCOLSEP. 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 screen_width
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 odstraňuje 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)
- text
- ntext
- image
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í.
Caution
-y 0 Tuto možnost používejte 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 tato -V možnost nastavená, v kombinaci s -b, 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 úroveň_chyby
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 packet_size
Vyžádá si paket s jinou velikostí. Tato možnost nastaví sqlcmd skriptovací proměnnou SQLCMDPACKETSIZE.
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 batch_terminator
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]
Platí pouze pro: Windows. Linux a macOS se nepodporují.
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í.
Note
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.)
Where:
-
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.
Note
V systému macOS místo toho spusťte sqlcmd '-?' (s uvozovkami).
Remarks
Možnosti se nemusí používat v pořadí uvedeném v oddílu syntaxe.
Note
Pokud použijete -i možnost 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 naleznete v tématu Použití sqlcmd.
Note
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.
Podpora DSN v sqlcmd a bcp
Název zdroje dat (DSN) můžete místo názvu serveru zadat v sqlcmd nebo bcp -S možnost (nebo sqlcmd :Connect příkaz), pokud zadáte -D.
-D způsobí , že se sqlcmd nebo bcp připojí k serveru zadanému v dsN pomocí možnosti -S .
Systémové dsN jsou uloženy v odbc.ini souboru v adresáři ODBC SysConfigDir (/etc/odbc.ini ve standardních instalacích). DsN uživatele jsou uloženy v .odbc.ini domovském adresáři uživatele (~/.odbc.ini).
V systémech Windows jsou systémové a uživatelské DSN uloženy v registru a spravovány prostřednictvím odbcad32.exe.
Bcp a sqlcmd nepodporují názvy DSN souborů.
Seznam položek, které ovladač podporuje, najdete v tématu DSN a klíčová slova připojovacího řetězce a atributy .
V DSN je vyžadována pouze DRIVER položka, ale pro připojení ke vzdálenému serveru, sqlcmd nebo bcp potřebuje hodnotu v elementu SERVER .
SERVER Pokud je prvek prázdný nebo není v DSN, sqlcmd a bcp se pokusí připojit k výchozí instanci v místním systému.
Při použití nástroje bcp v systémech Windows vyžadují SQL Server 2017 (14.x) a starší verze ovladač SQL Native Client 11 (sqlncli11.dll), zatímco SQL Server 2019 (15.x) a novější verze vyžadují ovladač Microsoft ODBC 17 pro ovladač SQL Serveru (msodbcsql17.dll).
Pokud je stejná možnost zadaná v dsN i v příkazovém řádku sqlcmd nebo bcp , přepíše možnost příkazového řádku hodnotu použitou v dsN. Pokud má například DSN DATABASE položku a parametr příkazového řádku sqlcmd obsahuje -d, použije se hodnota předaná do -d. Pokud Trusted_Connection=yes je zadán v DSN, používá se ověřování kerberos, uživatelské jméno (-U) a heslo (-P), pokud je zadáno, budou ignorovány.
Existující skripty, které vyvolávají isql , lze upravit tak, aby používaly sqlcmd definováním následujícího aliasu: alias isql="sqlcmd -D".
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é provedení nebo spouštění dotazů na vyšší, než jak dlouho očekáváte, že provedení dávky nebo dotazu potrvá.
Při maximalizaci správnosti vám pomůžou následující postupy:
Pomocí
-V 16můž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 ERRORLEVELproměnnou. sqlcmd vrátí0normálně, jinak nastavíERRORLEVELpodle konfigurace-V. Jinými slovy,ERRORLEVELby 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.ERRORLEVELje 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.
Související obsah
- Kontrola nainstalované verze nástroje sqlcmd
- Stažení a instalace nástroje sqlcmd
- Příkazy v nástroji sqlcmd
- Použití sqlcmd se skriptovacími proměnnými
- Rychlý start: Spuštění imagí kontejneru SQL Serveru s Linuxem pomocí dockeru
- Spuštění nástroje sqlcmd
- Spuštění T-SQL ze souboru skriptu pomocí sqlcmd
- Použití sqlcmd
- Připojení k SQL Serveru pomocí sqlcmd
- upravit skripty SQLCMD pomocí editoru dotazů
- vytvoření kroku úlohy CmdExec