Dela via


Redigera SQLCMD-skript med Frågeredigeraren

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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

  1. 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.

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

    Frågeredigeraren kör SQLCMD-instruktioner i kontexten för frågeredigeraren.

  3. I verktygsfältet SQL Editor väljer du AdventureWorks2022i listan Tillgängliga databaser .

  4. 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
    
  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 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 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 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

Nästa steg