Ответы:
Как уже было сказано, пути нет.
Однако, одну вещь, которую мы делаем, это включаем быструю проверку в заголовок нашего скрипта, чтобы определить, включен ли режим 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
Существует причина, по которой используется Severity 20, он стремится немедленно GO
разорвать соединение, предотвращая запуск любого кода скрипта, даже если в скрипте есть более поздние терминаторы пакетов.
Обозначают системные проблемы и являются фатальными ошибками. Это означает, что задача компонента Database Engine, выполняющая инструкцию или пакет, больше не выполняется. Задача записывает информацию о том, что произошло, а затем завершается. В большинстве случаев подключение приложения к экземпляру компонента Database Engine также может прерваться . Если это произойдет, в зависимости от проблемы приложение может не подключиться.
Сообщения об ошибках в этом диапазоне могут влиять на все процессы, обращающиеся к данным в одной и той же базе данных, и могут указывать, что база данных или объект повреждены. Сообщения об ошибках с уровнем серьезности от 19 до 24 записываются в журнал ошибок.
SET NOEXEC ON
в качестве дополнительной меры безопасности, чтобы предотвратить запуск чего-либо еще в скрипте.
Нет.
Но вы всегда можете работать в режиме SQLCMD и иметь в нем T-SQL
Чтобы провести четкое различие между командами SQLCMD и Transact-SQL, все команды SQLCMD должны иметь префикс двоеточия (:).