Delen via


SQLCMD-scripts bewerken met Query-editor

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Met behulp van de Database Engine-queryeditor in SQL Server Management Studio kunt u query's schrijven en bewerken als SQLCMD-scripts. U gebruikt SQLCMD-scripts bij het verwerken van Windows-systeemopdrachten en Transact-SQL-instructies in hetzelfde script.

SQLCMD-modus

Als u de Database Engine-queryeditor wilt gebruiken om SQLCMD-scripts te schrijven of te bewerken, moet u de SQLCMD-scriptmodus inschakelen. De SQLCMD-modus is standaard niet toegestaan in de Query-editor. U kunt de scriptmodus inschakelen door het pictogram SQLCMD-modus op de werkbalk te selecteren of door SQLCMD-modus te selecteren in het menu Query.

Notitie

Als u de SQLCMD-modus inschakelt, worden IntelliSense en het Transact-SQL foutopsporingsprogramma in de Database Engine-queryeditor uitgeschakeld.

SQLCMD-scripts in de Query-editor kunnen dezelfde functies gebruiken die alle Transact-SQL scripts gebruiken. Deze functies omvatten het volgende:

  • Kleurcodering
  • Scripts uitvoeren
  • Broncodebeheer
  • Scripts parseren
  • Showplan

SQLCMD-scripts inschakelen in Query-editor

Gebruik de volgende procedure om SQLCMD-scripts in te schakelen voor een actief queryeditor-venster voor database-engine.

Een queryeditorvenster van een database-engine overschakelen naar de SQLCMD-modus

  1. Klik in de Objectverkenner met de rechtermuisknop op de server en selecteer vervolgens Nieuwe Queryom een nieuw venster voor de Database Engine Query Editor te openen.

  2. In het -menu Query selecteer SQLCMD-modus.

    De Query-editor voert SQLCMD-instructies uit in de context van de Query-editor.

  3. Selecteer in de lijst met beschikbare databases op de werkbalk AdventureWorks2022.

  4. Typ in het venster Queryeditor de volgende Transact-SQL-instructies en de !!DIR SQLCMD-instructie:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. Druk op F5 om de sectie met gemengde Transact-SQL- en MS-DOS-verklaringen uit te voeren.

    Let op de twee deelvensters met SQL-resultaten uit de eerste en derde instructies.

  6. Selecteer in het deelvenster Resultaten het tabblad Berichten om de berichten uit alle drie de uitspraken weer te geven.

    • (6 rijen beïnvloed)
    • <De mapgegevens>
    • (4 rijen aangepast)

Belangrijk

Wanneer het sqlcmd-hulpprogramma wordt uitgevoerd vanaf de opdrachtregel, is volledige interactie met het besturingssysteem mogelijk. Wanneer u queryeditor gebruikt in SQLCMD-modus, moet u ervoor zorgen dat u geen interactieve instructies uitvoert. Query-editor kan niet reageren op prompts van het besturingssysteem.

Zie sqlcmd hulpprogrammaof volg de sqlCMD-zelfstudie voor meer informatie over het uitvoeren van SQLCMD.

SQLCMD-scripts standaard inschakelen

Als u SQLCMD-scripts standaard wilt inschakelen, selecteert u in het menu Extra de optie Opties, vouwt u Queryuitvoeringen SQL Serveruit, selecteert u de pagina Algemeen en schakelt u vervolgens het selectievakje Nieuwe query's standaard openen in SQLCMD-modus in.

SQLCMD-scripts schrijven en bewerken

Nadat u de scriptmodus hebt ingeschakeld, kunt u SQLCMD-opdrachten en Transact-SQL-instructies schrijven. De volgende regels zijn van toepassing:

  • SQLCMD-opdrachten moeten de eerste instructie op een regel zijn.

  • Op elke regel is slechts één SQLCMD-opdracht toegestaan.

  • SQLCMD-opdrachten kunnen worden voorafgegaan door opmerkingen of witruimte.

  • SQLCMD-opdrachten binnen opmerkingentekens worden niet uitgevoerd.

  • Opmerkingstekens voor een enkele regel zijn twee leestekens (--)) en moeten aan het begin van een regel staan.

  • Opdrachten van het besturingssysteem moeten worden voorafgegaan door twee uitroeptekens (!!). Het commando dubbele uitroeptekens zorgt ervoor dat de instructie die op de uitroeptekens volgt, wordt uitgevoerd met behulp van de cmd.exe-opdrachtprocessor. De tekst na !! wordt doorgegeven als een parameter aan cmd.exe, zodat de laatste opdrachtregel wordt uitgevoerd als: "%SystemRoot%\system32\cmd.exe /c <text after !!>".

  • Als u een duidelijk onderscheid wilt maken tussen SQLCMD-opdrachten en Transact-SQL, moeten alle SQLCMD-opdrachten worden voorafgegaan door een dubbele punt (:).

  • De opdracht GO kan worden gebruikt zonder voorwoord of voorafgegaan door !!:

  • De Database Engine Query-editor ondersteunt omgevingsvariabelen en -variabelen die zijn gedefinieerd als onderdeel van een SQLCMD-script, maar biedt geen ondersteuning voor ingebouwde SQLCMD- of osql- variabelen. SQLCMD-verwerking door SQL Server Management Studio is hoofdlettergevoelig voor variabelen. Print '$(COMPUTERNAAM)' produceert bijvoorbeeld het juiste resultaat, maar PRINT '$(ComputerName)' retourneert een fout.

Voorzichtigheid

SQL Server Management Studio maakt gebruik van Microsoft .NET FrameworkSqlClient voor uitvoering in de normale en SQLCMD-modus. Wanneer SQLCMD vanaf de opdrachtregel wordt uitgevoerd, wordt de OLE DB-provider gebruikt. Omdat er verschillende standaardopties van toepassing kunnen zijn, is het mogelijk om verschillend gedrag te krijgen tijdens het uitvoeren van dezelfde query in de SQL Server Management Studio SQLCMD-modus en in het hulpprogramma SQLCMD.

Ondersteunde SQLCMD-syntaxis

De Query-editor van de database-engine ondersteunt de volgende TREFwoorden voor SQLCMD-scripts:

  • [!!:]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

Notitie

Uitvoer verzenden naar het tabblad Berichten voor zowel :error als :out, stderr en stdout.

SQLCMD-opdrachten die hierboven niet worden vermeld, worden niet ondersteund in Query-editor. Wanneer een script met SQLCMD-trefwoorden niet wordt ondersteund, verzendt de Query-editor een bericht 'Opdracht negeren <genegeerde opdracht>' naar de bestemming voor elk niet-ondersteund trefwoord. Het script wordt uitgevoerd, maar de niet-ondersteunde opdrachten worden genegeerd.

Voorzichtigheid

Omdat u SQLCMD niet vanaf de opdrachtregel start, zijn er enkele beperkingen bij het uitvoeren van Query-editor in de SQLCMD-modus. U kunt geen opdrachtregelparameters zoals variabelen doorgeven en omdat de Query-editor niet kan reageren op prompts van het besturingssysteem, moet u voorzichtig zijn met het uitvoeren van interactieve instructies.

Kleurcodering in SQLCMD-scripts

Als SQLCMD-scripts zijn ingeschakeld, worden scripts kleurcoded. De kleurcodering voor Transact-SQL trefwoorden blijft hetzelfde. SQLCMD-opdrachten worden weergegeven met een gearceerde achtergrond.

Voorbeeld

In het volgende voorbeeld wordt een SQLCMD-instructie gebruikt om een uitvoerbestand met de naam testoutput.txtte maken, worden twee Transact-SQL SELECT-instructies uitgevoerd, samen met één opdracht van het besturingssysteem (om de huidige map af te drukken). Het resulterende bestand bevat de berichtuitvoer van de DIR-instructie en de resultaten van de Transact-SQL-instructies.

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

Volgende stappen