回答:
すでに述べたように、方法はありません。
ただし、スクリプトヘッダーにクイックチェックを含めて、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
ます。スクリプトの後半にバッチターミネータが存在する場合でも、すぐに接続を強制終了し、それ以上のスクリプトコードの実行を妨げます。
システムの問題を示し、致命的なエラーです。これは、ステートメントまたはバッチを実行しているデータベースエンジンタスクが実行されていないことを意味します。タスクは、発生した内容に関する情報を記録してから終了します。ほとんどの場合、データベースエンジンのインスタンスへのアプリケーション接続も終了する場合があります。これが発生した場合、問題によっては、アプリケーションが再接続できない場合があります。
この範囲のエラーメッセージは、同じデータベース内のデータにアクセスするすべてのプロセスに影響を与え、データベースまたはオブジェクトが破損していることを示す場合があります。重大度レベルが19〜24のエラーメッセージがエラーログに書き込まれます。
番号。
ただし、常にSQLCMDモードで実行し、T-SQLを使用できます。
SQLCMDコマンドとTransact-SQLを明確に区別するには、すべてのSQLCMDコマンドに接頭辞コロン(:)を付ける必要があります。