これが私の構成です:
- データベースの更新に使用する再実行可能なバッチ スクリプトがあります。
- そのバッチ スクリプト内には、次のようなコードがあります。
- テーブル 'A' が存在しない場合は、テーブル 'A' を作成し、そこに行を挿入します。
- そのバッチ スクリプトの後半で、そのテーブルにスキーマ バインドされたインデックス付きビューを作成します。
- ご存じないかもしれませんが、インデックス付きビューには特定のクライアント設定が必要です。
場合によっては、テーブルが作成された後にスクリプトを再実行すると、SQL Server Management Studio は、「このテーブルが存在しない場合」コードによって保護されている「行の挿入」コードを評価し、次のエラー:
メッセージ 1934、レベル 16、状態 1、行 15 INSERT は、次の SET オプションの設定が正しくないため失敗しました: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING, ARITHABORT'. 計算列のインデックス付きビューやインデックス、フィルター選択されたインデックス、クエリ通知、XML データ型メソッド、空間インデックス操作で使用する SET オプションが正しいことを確認します。
- 注: 誰かがこの INSERT ステートメントを単独で試した場合、SSMS がこのエラーを生成する
と完全に予想されます。
- ただし、条件付きブロックによって保護されている場合はそうではありません。
私の質問:
SSMS コンパイラは、実際に実行されるかどうかに関係なく、すべての式を評価しますか?