Dela via


Redigera SQLCMD-skript med Frågeredigeraren

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ägefrå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

  1. Högerklicka på servern i Object Explorer och välj sedan Ny fråga för att öppna ett nytt frågeredigerarefönster.

  2. På menyn Query väljer du SQLCMD-läge.

    SQLCMD-uttryck körs i kontexten för frågeredigeraren.

  3. I verktygsfältet SQL Editor väljer du i listan AdventureWorks2025 .

  4. 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;
    GO
    
  5. 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.

  6. 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 av cmd.exe-kommandoprocessorn. Texten efter !! skickas som en parameter till cmd.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 GO kan 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, men PRINT '$(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|stdout 2
  • :out <filename>|stderr|stdout 2

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