0

ちょっとした動的 SQL 用のカスタム エラー メッセージ文字列を作成しようとしています。動的 SQL でラップされていない場合は、次のようになります。

SET @message = 'EXCEPTION: Msg ' + COALESCE(CAST(ERROR_NUMBER() AS NVARCHAR(20)), '[NULL]') + ', ' +
   'Level ' + COALESCE(CAST(ERROR_SEVERITY() AS NVARCHAR(20)), '[NULL]')  + ', ' +
   'State ' + COALESCE(CAST(ERROR_STATE() AS NVARCHAR(20)), '[NULL]') + ', ' +
   'Procedure ' + COALESCE(@PROCEDURE_NAME, '[NULL]') + ', ' +
   'Line ' + COALESCE(CAST(ERROR_LINE() AS NVARCHAR(20)), '[NULL]') + ', ' +
   'Message: ' + COALESCE(ERROR_MESSAGE(), '[NULL]') ;

動的 SQL で実行されたときにこのように見えるように、引用符を下ろすのに苦労しています。引用符は次のように配置する必要があります。

EXEC @sql = 'BEGIN TRY
...
END TRY 
BEGIN CATCH 
DECLARE @PROCEDURE_NAME NVARCHAR(128);
SET @PROCEDURE_NAME = OBJECT_NAME(@@PROCID);

END CATCH
';
4

1 に答える 1

2

あなたのメッセージコードは問題ないようです。

ただし、@message を動的 SQL に埋め込みたい場合は、すべての単一引用符を二重にする必要があります。

これを手作業で行うのは苦痛です。だから、私は次のことをします:

  1. 行ったように SQL を記述します。
  2. それを選択します。
  3. H と入力します (またはメニューから選択します)。'検索ボックスに一重引用符 ( ) を入力し、置換ボックスに一重引用符 ( ) を 2 つ入力し''ます。
  4. 選択範囲内のすべてを置き換えます。
于 2012-12-12T14:28:39.737 に答える