it-swarm-eu.dev

Mohu povolit režim SQLCMD zevnitř skriptu?

Existuje něco jako směrnice, kterou mohu použít ve skriptu k vynucení SSMS, aby povolil/zakázal režim SQLCMD?

17
bernd_k

Jak již bylo řečeno, neexistuje způsob.

Jedna věc, kterou uděláme, je zahrnout do naší hlavičky skriptu rychlou kontrolu, abychom určili, zda je režim SQLCMD zapnutý (a skript ukončit, pokud ne):

: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 not see this unless SQLCMD mode is on'
-- Rest of script goes here

GO
SET NOEXEC OFF
GO

Existuje důvod, proč se používá závažnost 20, má tendenci okamžitě ukončit připojení, což zabraňuje spuštění dalšího kódu skriptu, i když v skriptu jsou GO dávkové terminátory.

závažnosti 20–24 :

Označují systémové problémy a jsou závažnými chybami, což znamená, že již není spuštěna úloha Database Engine, která provádí příkaz nebo dávku. Úloha zaznamenává informace o tom, co se stalo, a pak skončí. Ve většině případů může být také ukončeno připojení aplikace k instanci databázového stroje . Pokud k tomu dojde, v závislosti na problému se aplikace pravděpodobně nebude moci znovu připojit.

Chybové zprávy v tomto rozsahu mohou ovlivnit všechny procesy přistupující k datům ve stejné databázi a mohou znamenat poškození databáze nebo objektu. Chybové zprávy s úrovní závažnosti od 19 do 24 se zapisují do protokolu chyb.

17
Dan Nolan

Ne.

Ale vždy můžete běžet v režim SQLCMD a mít v sobě T-SQL

Aby bylo možné jasně rozlišovat mezi příkazy SQLCMD a Transact-SQL, musí být všechny příkazy SQLCMD opatřeny dvojtečkou (:).

7
gbn