Redigera SQLCMD-skript med Frågeredigeraren
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Med hjälp av frågeredigeraren för databasmotorn i SQL Server Management Studio kan du skriva och redigera frågor som SQLCMD-skript. Du använder SQLCMD-skript när du bearbetar Windows System-kommandon och Transact-SQL-instruktioner i samma skript.
SQLCMD-läge
Om du vill använda frågeredigeraren för databasmotorn för att skriva eller redigera SQLCMD-skript måste du aktivera SQLCMD-skriptläget. Som standard tillåts inte SQLCMD-läge i frågeredigeraren. Du kan aktivera skriptläge genom att välja ikonen SQLCMD-läge i verktygsfältet eller genom att välja SQLCMD-läge från menyn Query.
Observera
Om du aktiverar SQLCMD-läge inaktiveras IntelliSense och Transact-SQL felsökaren i frågeredigeraren för databasmotorn.
SQLCMD-skript i frågeredigeraren kan använda samma funktioner som alla Transact-SQL skript använder. Dessa funktioner omfattar följande:
- Färgkodning
- Körning av skript
- Källkontroll
- Parsa skript
- Showplan
Aktivera SQLCMD-skript i Frågeredigeraren
Om du vill aktivera SQLCMD-skript för ett aktivt fönster i frågeredigeraren för databasmotorn använder du följande procedur.
Växla ett frågeredigerarfönster för databasmotorn till SQLCMD-läge
Högerklicka på servern i Object Explorer och välj sedan Ny frågaför att öppna ett nytt redigeringsfönster för databasfrågor.
På menyn Query väljer du SQLCMD-läge.
Frågeredigeraren kör SQLCMD-instruktioner i kontexten för frågeredigeraren.
I verktygsfältet SQL Editor väljer du
AdventureWorks2022
i listan Tillgängliga databaser .I fönstret Frågeredigeraren skriver du följande Transact-SQL-instruktioner och
!!DIR
SQLCMD-instruktion:SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GO
Tryck på F5 för att köra avsnittet med blandade Transact-SQL- och MS-DOS-instruktioner.
Observera de två SQL-resultatrutorna från den första och tredje instruktionen.
I fönstret Resultat väljer du fliken Meddelanden för att se meddelandena från alla tre uttrycken:
- (6 rader påverkas)
- <Kataloginformationen>
- (4 rader påverkas)
Viktig
När det körs från kommandoraden tillåter verktyget sqlcmd fullständig interaktion med operativsystemet. När du använder frågeredigeraren i SQLCMD-lägemåste du vara noga med att inte köra interaktiva instruktioner. Frågeredigeraren kan inte svara på operativsystemets frågor.
Mer information om hur du kör SQLCMD finns i sqlcmd-verktygeteller i självstudiekursen om SQLCMD.
Aktivera SQLCMD-skript som standard
Om du vill aktivera SQLCMD-skript som standard går du till menyn Verktyg, väljer Alternativ, expanderar Frågekörningoch SQL Serverväljer du sidan Allmänt och markerar sedan kryssrutan Öppna nya frågor i SQLCMD-läge som standard.
Skriva och redigera SQLCMD-skript
När du har aktiverat skriptläge kan du skriva SQLCMD-kommandon och Transact-SQL-instruktioner. Följande regler gäller:
SQLCMD-kommandon måste vara den första instruktionen på en rad.
Endast ett SQLCMD-kommando tillåts på varje rad.
SQLCMD-kommandon kan föregås av kommentarer eller tomt utrymme.
SQLCMD-kommandon inom kommentarstecken körs inte.
Kommentarstecken med en rad är två bindestreck (
--)
och måste visas i början av en rad.Operativsystemkommandon måste föregås av två utropstecken (
!!
). Kommandot dubbla utropstecken gör att instruktionen som följer utropspunkterna körs med hjälp avcmd.exe
-kommandoprocessorn. Texten efter!!
skickas som en parameter tillcmd.exe
, så den sista kommandoraden körs som:"%SystemRoot%\system32\cmd.exe /c <text after !!>"
.För att göra en tydlig skillnad mellan SQLCMD-kommandon och Transact-SQL måste alla SQLCMD-kommandon prefixeras med ett kolon (
:
).Kommandot
GO
kan användas utan förord eller föregås av!!:
Frågeredigeraren för databasmotorn stöder miljövariabler och variabler som definieras som en del av ett SQLCMD-skript, men som inte stöder inbyggda SQLCMD- eller osql- variabler. SQLCMD-bearbetning av SQL Server Management Studio är skiftlägeskänslig för variabler. Print '$(COMPUTERNAME)' ger till exempel rätt resultat, men PRINT '$(ComputerName)' returnerar ett fel.
Försiktighet
SQL Server Management Studio använder Microsoft .NET FrameworkSqlClient för körning i vanligt läge och SQLCMD-läge. När du kör från kommandoraden använder SQLCMD OLE DB-providern. Eftersom olika standardalternativ kan tillämpas är det möjligt att få olika beteende när samma fråga körs i SQL Server Management Studio SQLCMD-läge och i SQLCMD-verktyget.
SQLCMD-syntax som stöds
Frågeredigeraren för databasmotorn stöder följande nyckelord för SQLCMD-skript:
[!!:]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
Notera
Skicka utdata till fliken meddelanden för både :error
och :out
, stderr
och stdout
.
SQLCMD-kommandon som inte anges ovan stöds inte i Frågeredigeraren. När ett skript som innehåller SQLCMD-nyckelord inte stöds, skickar frågeredigeraren meddelandet "Ignorera kommando <ignorerat kommando>" till målet för varje nyckelord som inte stöds. Skriptet körs korrekt, men kommandon som inte stöds ignoreras.
Försiktighet
Eftersom du inte startar SQLCMD från kommandoraden finns det vissa begränsningar när du kör Frågeredigeraren i SQLCMD-läge. Du kan inte skicka in kommandoradsparametrar, till exempel variabler, och eftersom frågeredigeraren inte kan svara på operativsystemuppmaningar måste du vara noga med att inte köra interaktiva instruktioner.
Färgkodning i SQLCMD-skript
När SQLCMD-skript har aktiverats är skripten färgkodade. Färgkodningen för Transact-SQL nyckelord förblir densamma. SQLCMD-kommandon visas med en skuggad bakgrund.
Exempel
I följande exempel används en SQLCMD-instruktion för att skapa en utdatafil med namnet testoutput.txt, kör två Transact-SQL SELECT-instruktioner tillsammans med ett operativsystemkommando (för att skriva ut den aktuella katalogen). Den resulterande filen innehåller meddelandeutdata från DIR
-instruktionen och resultatet från Transact-SQL-uttrycken.
:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version';
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name';
GO