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.
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
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
SET NOEXEC ON
kiegészítő biztonsági intézkedésként megakadályozza, hogy a szkriptben bármi más fusson.incorrect syntax near ':'
-t fogja megjeleníteni a kezdeti:setvar
miatt …SET NOEXEC ON
) végrehajtásra kerül. ANOEXEC
utasítások oka annak a helyzetnek a felderítése, amikor a végrehajtó felhasználónak nincssysadmin
/ALTER TRACE
privilégiumok, amelyek a végzetes hibák felvetéséhez szükségesek.