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(或从菜单中选择)。'在搜索框中放置一个单引号 ( ''),在替换为框中放置两个单引号 ( )。
  4. 替换选择中的所有内容。
于 2012-12-12T14:28:39.737 回答