Sdílet prostřednictvím


Úprava skriptů SQLCMD pomocí Editoru dotazů

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Pomocí Editoru dotazů databázového stroje v aplikaci SQL Server Management Studio můžete psát a upravovat dotazy jako skripty SQLCMD. Skripty SQLCMD se používají při zpracování systémových příkazů systému Windows a Transact-SQL příkazů ve stejném skriptu.

Režim SQLCMD

Chcete-li použít Editor dotazů databázového stroje k zápisu nebo úpravě skriptů SQLCMD, musíte povolit režim skriptování SQLCMD. Ve výchozím nastavení není v Editoru dotazů povolený režim SQLCMD. Režim skriptování můžete povolit výběrem ikony režimu SQLCMD na panelu nástrojů nebo výběrem režimu SQLCMD v nabídce Dotaz.

Poznámka

Povolení režimu SQLCMD vypne IntelliSense a ladicí program Transact-SQL v Editoru dotazů databázového stroje.

Skripty SQLCMD v Editoru dotazů můžou používat stejné funkce, které používají všechny Transact-SQL skripty. Mezi tyto funkce patří:

  • Barevné kódování
  • Spouštění skriptů
  • Správa zdrojového kódu
  • Analýza skriptů
  • Plán zobrazení

Povolení skriptování SQLCMD v Editoru dotazů

Pokud chcete zapnout skriptování SQLCMD pro aktivní okno Editoru dotazů databázového stroje, použijte následující postup.

Přepnutí okna editoru dotazů databázového stroje do režimu SQLCMD

  1. V Průzkumníku objektů klikněte pravým tlačítkem myši na server a pak vyberte Nový dotaz, a otevřete tak nové okno Editoru dotazů databázového stroje.

  2. V nabídce dotazu vyberte režim SQLCMD.

    Editor dotazů spouští příkazy SQLCMD v kontextu Editoru dotazů.

  3. Na panelu nástrojů editoru SQL v seznamu Dostupné databáze vyberte AdventureWorks2022.

  4. V okně Editoru dotazů zadejte následující příkazy Transact-SQL a příkaz !!DIR SQLCMD:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. Stisknutím klávesy F5 spusťte sekci smíšených příkazů Transact-SQL a MS-DOS.

    Všimněte si dvou podokna výsledků SQL z prvního a třetího příkazu.

  6. V podokně Výsledky vyberte záložku Zprávy, abyste si zobrazili zprávy ze všech tří příkazů.

    • (6 řádků zasažených)
    • <informace o adresáři>
    • (4 řádky ovlivněny)

Důležitý

Při spuštění z příkazového řádku nástroj sqlcmd umožňuje úplnou interakci s operačním systémem. Pokud používáte Editor dotazů v režimu SQLCMD, musíte být opatrní, abyste nespustí interaktivní příkazy. Editor dotazů nemůže reagovat na výzvy operačního systému.

Další informace o tom, jak spustit SQLCMD, naleznete v tématu sqlcmd nástroj, nebo si projděte kurz SQLCMD.

Povolení skriptování SQLCMD ve výchozím nastavení

Pokud chcete ve výchozím nastavení zapnout skriptování SQLCMD, v nabídce Nástroje vyberte Možnosti, rozbalte položku Spouštění dotazůa SQL Server, vyberte stránku Obecné a potom zaškrtněte políčko Otevřít nové dotazy v režimu SQLCMD.

Psaní a úpravy skriptů SQLCMD

Po povolení režimu skriptování můžete psát příkazy SQLCMD a Transact-SQL. Platí následující pravidla:

  • Příkazy SQLCMD musí být prvním příkazem na řádku.

  • Na každém řádku je povolen pouze jeden příkaz SQLCMD.

  • Příkazy SQLCMD můžou předcházet komentáře nebo prázdné znaky.

  • Příkazy SQLCMD uzavřené v komentářových znacích se nespouštějí.

  • Jednořádkové znaky komentáře jsou dvě pomlčky (--) a musí se zobrazit na začátku řádku.

  • Příkazy operačního systému musí předcházet dvěma vykřičníky (!!). Příkaz s dvojitými vykřičníky způsobí, že příkaz, který následuje za nimi, se provede pomocí procesoru příkazů cmd.exe. Text po !! se předá jako parametr cmd.exe, takže poslední příkazový řádek se spustí jako: "%SystemRoot%\system32\cmd.exe /c <text after !!>".

  • Aby bylo možné jasně rozlišovat mezi příkazy SQLCMD a jazykem Transact-SQL, musí být všechny příkazy SQLCMD předponou dvojtečky (:).

  • Příkaz GO lze použít bez předmluvy nebo před příkazem !!:

  • Editor dotazů databázového stroje podporuje proměnné prostředí a proměnné definované jako součást skriptu SQLCMD, ale nepodporuje integrované proměnné SQLCMD ani osql proměnných. Zpracování SQLCMD v SQL Server Management Studio je citlivé na velikost písmen u proměnných. Například print '$(COMPUTERNAME)' vytvoří správný výsledek, ale PRINT '$(ComputerName)' vrátí chybu.

Opatrnost

SQL Server Management Studio používá Microsoft .NET FrameworkSqlClient ke spouštění v běžném režimu a SQLCMD. Při spuštění z příkazového řádku používá SQLCMD zprostředkovatele OLE DB. Vzhledem k tomu, že se mohou použít různé výchozí možnosti, je možné získat různé chování při provádění stejného dotazu v režimu SQL Server Management Studio SQLCMD a v nástroji SQLCMD.

Podporovaná syntaxe SQLCMD

Editor dotazů databázového stroje podporuje následující klíčová slova skriptu SQLCMD:

  • [!!:]GO[count]
  • !! <command>
  • :exit(statement)
  • :Quit
  • :r <filename>
  • :setvar <var> <value>
  • :connect server[\instance] [-l login_timeout] [-U user [-P password]]
  • :on error [ignore|exit]
  • :error <filename>|stderr|stdout
  • :out <filename>|stderr|stdout

Poznámka

Odeslání výstupu na kartu zpráv pro :error a :out, stderr a stdout.

Příkazy SQLCMD, které nejsou uvedené výše, nejsou v Editoru dotazů podporované. Pokud se spustí skript obsahující nepodporovaná klíčová slova SQLCMD, editor dotazů odešle zprávu „Ignorování příkazu <, příkaz>ignorován“ do cíle pro každé nepodporované klíčové slovo. Skript se úspěšně spustí, ale nepodporované příkazy se ignorují.

Opatrnost

Vzhledem k tomu, že nespouštíte SQLCMD z příkazového řádku, existují určitá omezení při spuštění Editoru dotazů v režimu SQLCMD. Nemůžete předat parametry příkazového řádku, jako jsou proměnné, a protože Editor dotazů nemůže reagovat na výzvy operačního systému, musíte být opatrní, abyste nespustí interaktivní příkazy.

Barevné kódování ve skriptech SQLCMD

Při povoleném skriptování SQLCMD jsou skripty barevně kódované. Barevné kódování pro Transact-SQL klíčových slov zůstává stejné. Příkazy SQLCMD se zobrazují se stínovaným pozadím.

Příklad

Následující příklad používá příkaz SQLCMD k vytvoření výstupního souboru s názvem testoutput.txt, spustí dva příkazy Transact-SQL SELECT spolu s jedním příkazem operačního systému (pro tisk aktuálního adresáře). Výsledný soubor obsahuje výstup zprávy z příkazu DIR a výstup výsledků z příkazů Transact-SQL.

:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version';
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name';
GO

Další kroky