Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd frågeredigeraren i SQL Server Management Studio (SSMS) för att skriva och redigera frågor som SQLCMD-skript. Du kan använda SQLCMD-skript för att bearbeta Windows-systemkommandon och Transact-SQL-instruktioner i samma skript.
Aktivera SQLCMD-läge
Om du vill använda frågeredigeraren för att skriva eller redigera SQLCMD-skript måste du aktivera SQLCMD-skriptläget. SQLCMD-läget är inte aktiverat som standard. Du kan aktivera skriptläge genom att välja ikonen SQLCMD-läge i verktygsfältet eller genom att välja SQLCMD-läge på frågemenyn .
Anmärkning
När du aktiverar SQLCMD-läge inaktiveras IntelliSense och Transact-SQL felsökningsprogrammet i frågeredigeraren.
SQLCMD-skript i frågeredigeraren kan använda samma funktioner som alla Transact-SQL skript använder. Dessa funktioner omfattar bland annat:
- Färgkodning
- Körning av skript
- Källkontroll
- Bearbeta skript
- Visningsplan
Aktivera SQLCMD-skript i Frågeredigeraren
Om du vill aktivera SQLCMD-skript för ett aktivt frågeredigerarefönster använder du följande procedur.
Växla ett frågeredigerarefönster till SQLCMD-läge
Högerklicka på servern i Object Explorer och välj sedan Ny fråga för att öppna ett nytt frågeredigerarefönster.
På menyn Query väljer du SQLCMD-läge.
SQLCMD-uttryck körs i kontexten för frågeredigeraren.
I verktygsfältet SQL Editor väljer du i listan
AdventureWorks2025.I frågeredigerarens fönster skriver du följande Transact-SQL-instruktioner och SQLCMD-instruktionen
!!DIR:SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GOTryck 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 row(s) affected)<The directory information>(4 row(s) affected)
Viktigt!
När du kör sqlcmd från kommandoraden tillåter det fullständig interaktion med operativsystemet. När du använder frågeredigeraren i SQLCMD-läge bör 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 från kommandoraden finns i sqlcmd-verktyget.
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 både 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.
Du kan använda kommentarer och tomt utrymme framför SQLCMD-kommandon.
SQLCMD-kommandon inom kommentarstecken körs inte.
Kommentarstecken med en rad är två bindestreck (
--) och måste visas i början av en rad.Prefixoperativsystemkommandon med 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, prefix alla SQLCMD-kommandon med ett kolon (
:).Kommandot
GOkan användas utan förord eller föregås av!!:.Frågeredigeraren stöder miljövariabler och variabler som du definierar som en del av ett SQLCMD-skript, men det stöder inte inbyggda SQLCMD- eller osql-variabler . SSMS bearbetar SQLCMD-variabler som skiftlägeskänsliga. Till exempel
PRINT '$(COMPUTERNAME)'ger rätt resultat, menPRINT '$(ComputerName)'returnerar ett fel.
Försiktighet
SSMS använder SqlClient .NET-biblioteket för körning i vanligt läge och SQLCMD-läge. När du kör frågan från kommandoraden använder sqlcmd OLE DB-providern. Eftersom olika standardalternativ kan tillämpas kan du se olika beteenden när du kör samma fråga i SQLCMD-läge i SSMS, jämfört med SQLCMD-läge i sqlcmd-verktyget .
SQLCMD-syntax som stöds
Frågeredigeraren 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]]1 :on error [ignore|exit]-
:error <filename>|stderr|stdout2 -
:out <filename>|stderr|stdout2
1 Mer information om :connect kommandot finns i Kommandon i sqlcmd-verktyget.
2 Frågeredigeraren skickar utdata till fliken Meddelanden för stderr och stdout.
Frågeredigeraren stöder inte SQLCMD-kommandon som inte ingår i föregående lista. När du kör ett skript som innehåller SQLCMD-nyckelord som inte stöds ignorerar frågeredigeraren kommandot. För varje nyckelord som inte stöds skickar frågeredigeraren följande meddelande till målet:
Ignoring command <ignored_command>
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. Eftersom frågeredigeraren inte kan svara på operativsystemets frågor måste du också vara noga med att inte köra interaktiva instruktioner.
Färgkodning i SQLCMD-skript
När du aktiverar SQLCMD-skript är skripten färgkodade. Färgkodningen för Transact-SQL nyckelord förblir densamma. SQLCMD-kommandon visas med en skuggad bakgrund.
Examples
I följande exempel används en SQLCMD-instruktion för att skapa en utdatafil med namnet testoutput.txt. Den kör två Transact-SQL-instruktioner SELECT och ett operativsystemkommando som skriver ut den aktuella katalogen. Den resulterande filen innehåller meddelandeutdata från -instruktionen DIR och resultatet från Transact-SQL-uttrycken.
:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version';
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name';
GO