Engedélyezhetem az SQLCMD módot egy szkript belsejéből?

Van valami olyan irányelv, amelyet használhatok egy szkriptben az SSMS kényszerítésére az SQLCMD mód engedélyezésére / letiltására?

Válasz

Amint már említettük, nem létezik ilyen mód.

Egy dolgot azonban A művelet egy gyors ellenőrzést tartalmaz a szkript fejlécünkben annak megállapítására, hogy az SQLCMD mód be van-e kapcsolva (és ha nem, szüntesse meg a szkriptet):

:setvar DatabaseName "MyDatabase" GO IF ("$(DatabaseName)" = "$" + "(DatabaseName)") RAISERROR ("This script must be run in SQLCMD mode. Disconnecting.", 20, 1) WITH LOG GO -- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors IF @@ERROR != 0 SET NOEXEC ON GO PRINT "You will only see this when SQLCMD mode is on" -- Rest of script goes here GO SET NOEXEC OFF GO 

Van egy A 20-as súlyosság oka, hogy azonnal megöli a kapcsolatot, megakadályozva a további parancsfájlok futtatását, még akkor is, ha a szkriptben később vannak GO kötegelt terminátorok.

20-24. súlyosság :

Rendszerproblémákat jelez, és végzetes hibákat jelent, ami azt jelenti, hogy az utasítás vagy kötegelt végrehajtó Database Engine feladat már nem fut. A feladat információkat rögzít a történtekről, majd leáll. A legtöbb esetben az alkalmazás kapcsolata az Adatbázis-motor példánya is leállhat . Ha ez megtörténik, a problémától függően Emiatt előfordulhat, hogy az alkalmazás nem képes újracsatlakozni.

Az ebben a tartományban található hibaüzenetek hatással lehetnek az ugyanazon adatbázisban lévő adatokhoz való hozzáférés folyamataira, és azt jelezhetik, hogy egy adatbázis vagy objektum sérült. A 19 és 24 közötti súlyossági szintű hibaüzeneteket a hibanaplóba írják.

Megjegyzések

  • ssms esetén az első 2 sor elegendő lenne, és az sql 2000 Query Analyzer esetében működik, de az üzenet nem jelenik meg.
  • De nem ' a szkript csak folytatja a végrehajtást a következő GO-ból?
  • Mint már említettük itt , beállíthatja a SET NOEXEC ON kiegészítő biztonsági intézkedésként megakadályozza, hogy a szkriptben bármi más fusson.
  • @Dan Nolan: Látom, valahogy hiányzott a 3. sor pontja. Tehát ha jól értem, ' nincs megoldás az SQLCMD mód kikapcsolására. Lényegében a incorrect syntax near ':' -t fogja megjeleníteni a kezdeti :setvar miatt …
  • @youcantryreachingme 20-as (és annál magasabb) súlyossági szintet az SQL végzetes hibának tekinti, amelynek eredményeként a kapcsolat azonnal megszakad, ezért nincs további köteg (még a SET NOEXEC ON) végrehajtásra kerül. A NOEXEC utasítások oka annak a helyzetnek a felderítése, amikor a végrehajtó felhasználónak nincs sysadmin / ALTER TRACE privilégiumok, amelyek a végzetes hibák felvetéséhez szükségesek.

Válasz

Nem.

De mindig futtathat SQLCMD módban, és T-SQL is van benne

Az SQLCMD parancsok és a Transact-SQL egyértelmű megkülönböztetéséhez az összes SQLCMD parancsot kettősponttal (:) kell előtagolni.

Megjegyzések

  • Ez még mindig érvényes az SQL Server 2012/2014/2016-ra?
  • @ hot2use: Igen, én ' 2014/2016-ban használta

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük