Megosztás:


SQLCMD-szkriptek szerkesztése a Lekérdezésszerkesztővel

Az SQL Server Management Studio (SSMS) lekérdezésszerkesztőjével SQLCMD-szkriptekként írhat és szerkeszthet lekérdezéseket. AZ SQLCMD-szkriptek használatával feldolgozhatja a Windows rendszerparancsait és Transact-SQL utasításokat ugyanabban a szkriptben.

SQLCMD mód engedélyezése

Ha SQLCMD-szkripteket szeretne írni vagy szerkeszteni a lekérdezésszerkesztővel, engedélyeznie kell az SQLCMD-szkriptelési módot. Az SQLCMD mód alapértelmezés szerint nincs engedélyezve. A szkriptelési módot az eszköztár SQLCMD mód ikonjának kiválasztásával, vagy a Lekérdezés menü SQLCMD-módjának kiválasztásával engedélyezheti.

Megjegyzés:

Ha engedélyezi az SQLCMD módot, az IntelliSense és a Transact-SQL hibakereső ki van kapcsolva a lekérdezésszerkesztőben.

A lekérdezésszerkesztő SQLCMD-szkriptjei ugyanazokat a funkciókat használhatják, mint Transact-SQL szkriptek. Ezek a funkciók a következők:

  • Színkódolás
  • Szkriptek végrehajtása
  • Forrásvezérlő
  • Szkriptek elemzése
  • Bemutatóterv

SQLCMD-szkriptek engedélyezése a Lekérdezésszerkesztőben

Ha be szeretné kapcsolni az SQLCMD-szkriptelést egy aktív Lekérdezésszerkesztő ablakhoz, kövesse az alábbi eljárást.

Lekérdezésszerkesztő ablakának váltása SQLCMD módra

  1. Az Object Explorerben kattintson a jobb gombbal a kiszolgálóra, majd válassza az Új lekérdezés lehetőséget egy új Lekérdezésszerkesztő ablak megnyitásához.

  2. A Lekérdezés menüben válassza SQLCMD módlehetőséget.

    Az SQLCMD-utasítások végrehajtása a lekérdezésszerkesztő kontextusában történik.

  3. Az SQL-szerkesztő eszköztár Elérhető adatbázisok listájában válassza a AdventureWorks2025lehetőséget.

  4. A lekérdezésszerkesztő ablakában írja be a következő Transact-SQL utasításokat és az SQLCMD utasítást !!DIR :

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. Nyomja le az F5 billentyűt a vegyes Transact-SQL és MS-DOS utasítások szakasz végrehajtásához.

    Figyelje meg a két SQL-eredménypanelt az első és a harmadik utasításból.

  6. Az Találatok panelen válassza a Üzenetek lapot, hogy mindhárom utasításból megjelenjenek az üzenetek:

    • (6 row(s) affected)
    • <The directory information>
    • (4 row(s) affected)

Fontos

Ha sqlcmd parancsot futtat a parancssorból, az lehetővé teszi az operációs rendszerrel való teljes interakciót. Ha a lekérdezésszerkesztőt SQLCMD módban használja, ügyeljen arra, hogy ne hajtsa végre az interaktív utasításokat. A lekérdezésszerkesztő nem tud válaszolni az operációs rendszer kéréseire. Az SQLCMD parancssorból való futtatásával kapcsolatos további információkért tekintse meg az sqlcmd segédprogramot.

SQLCMD-szkriptek engedélyezése alapértelmezés szerint

Ha alapértelmezés szerint be szeretné kapcsolni az SQLCMD-szkriptelést, az Eszközök menüben válassza a Beállításoklehetőséget, bontsa ki lekérdezésvégrehajtási, és SQL Server, jelölje be az Általános lapot, majd jelölje be a Alapértelmezés szerint új lekérdezések megnyitása SQLCMD módban mezőben.

SQLCMD-szkriptek írása és szerkesztése

A szkriptelési mód engedélyezése után sqlCMD-parancsokat és Transact-SQL utasításokat is írhat. A következő szabályok érvényesek:

  • Az SQLCMD-parancsnak egy sor első utasításának kell lennie.

  • Minden sorban csak egy SQLCMD-parancs engedélyezett.

  • Az SQLCMD-parancsok előtt megjegyzéseket és szabad területet használhat.

  • A megjegyzéskarakterekben lévő SQLCMD-parancsok nem lesznek végrehajtva.

  • Az egysoros megjegyzéskarakterek két kötőjelből (--) állnak, és egy sor elején kell megjelennie.

  • Helyezze el az operációsrendszer-parancsok elé két felkiáltójelet (!!). A dupla felkiáltójelek parancs a felkiáltójeleket követő utasítást a cmd.exe parancsfeldolgozóval hajtja végre. A !! utáni szöveget paraméterként adják át a cmd.exe-nak, így a végső parancssor a következőképpen hajtódik végre: "%SystemRoot%\system32\cmd.exe /c <text after !!>".

  • Az SQLCMD-parancsok és a Transact-SQL közötti egyértelmű különbségtétel érdekében minden SQLCMD-parancs elé írjon egy kettőspontot (:).

  • A GO parancs előszó és előtag !!:nélkül is használható.

  • A lekérdezésszerkesztő támogatja az SQLCMD-szkript részeként definiált környezeti változókat és változókat, de nem támogatja a beépített SQLCMD- vagy osql-változókat . Az SSMS a kis- és nagybetűk megkülönböztetéseként dolgozza fel az SQLCMD-változókat. Például PRINT '$(COMPUTERNAME)' a helyes eredményt hozza létre, de PRINT '$(ComputerName)' hibát ad vissza.

Caution

Az SSMS a .NET-kódtárat használja a SqlClient végrehajtáshoz normál és SQLCMD módban. Amikor a lekérdezést a parancssorból futtatja, az sqlcmd az OLE DB-szolgáltatót használja. Mivel különböző alapértelmezett beállítások vonatkozhatnak, előfordulhat, hogy eltérő viselkedés jelenik meg, amikor ugyanazt a lekérdezést SQLCMD módban hajtja végre az SSMS-ben, szemben az sqlcmd segédprogram SQLCMD módjával.

Támogatott SQLCMD-szintaxis

A lekérdezésszerkesztő a következő SQLCMD-szkript kulcsszavakat támogatja:

  • [!!:]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 További információ a parancsról: :connectParancsok az sqlcmd segédprogramban.

2 A lekérdezésszerkesztő a kimenetet az Üzenetek lapra stderrstdoutküldi.

A lekérdezésszerkesztő nem támogatja az előző listában nem szereplő SQLCMD-parancsokat. Ha nem támogatott SQLCMD-kulcsszavakat tartalmazó szkriptet hajt végre, a lekérdezésszerkesztő figyelmen kívül hagyja a parancsot. Minden nem támogatott kulcsszó esetében a lekérdezésszerkesztő a következő üzenetet küldi a célhelyre:

Ignoring command <ignored_command>

Caution

Mivel nem a parancssorból indítja el az SQLCMD-t, bizonyos korlátozások vonatkoznak a Lekérdezésszerkesztő SQLCMD módban való futtatásakor. Nem adhat meg parancssori paramétereket, például változókat. Mivel a lekérdezésszerkesztő nem tud válaszolni az operációs rendszer kéréseire, óvatosnak kell lennie, hogy ne hajtsa végre az interaktív utasításokat.

Színkódolás SQLCMD-szkriptekben

Az SQLCMD-szkriptek engedélyezésekor a szkriptek színkódoltak. A Transact-SQL kulcsszavak színkódolása változatlan marad. Az SQLCMD-parancsok árnyékolt háttérrel jelennek meg.

Példák

Az alábbi példa egy SQLCMD utasítást használ egy kimeneti fájl testoutput.txtlétrehozásához. Két Transact-SQL SELECT utasítást és egy operációsrendszer-parancsot futtat, amelyek az aktuális könyvtárat nyomtatják. Az eredményként kapott fájl tartalmazza az utasítás üzenetkimenetét DIR és a Transact-SQL utasítások eredménykimenetét.

:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version';
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name';
GO