SQLCMD-scripts bewerken met Query-editor
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
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.
In het -menu Query selecteer SQLCMD-modus.
De Query-editor voert SQLCMD-instructies uit in de context van de Query-editor.
Selecteer in de lijst met beschikbare databases op de werkbalk
AdventureWorks2022
.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
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.
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 decmd.exe
-opdrachtprocessor. De tekst na!!
wordt doorgegeven als een parameter aancmd.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