Відповіді:
Як було сказано, способу немає.
Однак одне, що ми робимо, - це включити швидку перевірку в наш заголовок сценарію, щоб визначити, чи увімкнено режим SQLCMD (та припинити сценарій, якщо ні):
: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
Існує причина, по якій використовується серйозність 20, вона, як правило, негайно GO
припиняє з'єднання, не дозволяючи виконувати більше коду сценарію, навіть якщо пізніше в сценарії є термінали пакетної роботи.
Вкажіть системні проблеми та є фатальними помилками, а це означає, що завдання Data Engine Engine, яке виконує оператор або пакет, більше не виконується. Завдання записує інформацію про те, що сталося, а потім припиняється. У більшості випадків підключення програми до екземпляра бази даних може також припинятися . Якщо це станеться, залежно від проблеми, додаток може не вдатися знову підключитися.
Повідомлення про помилки в цьому діапазоні можуть впливати на всі процеси доступу до даних в одній базі даних і можуть вказувати на пошкодження бази даних або об'єкта. Повідомлення про помилки із ступенем вираженості від 19 до 24 записуються до журналу помилок.
SET NOEXEC ON
додатковий захід безпеки, щоб запобігти запусканню будь-чого іншого в скрипті.
Ні.
Але ви завжди можете запустити в режимі SQLCMD і хоча в ньому є T-SQL
Щоб чітко розмежувати команди SQLCMD і Transact-SQL, усі команди SQLCMD потрібно встановити двокрапкою (:).