我正在尝试为一些动态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
';
答案 0 :(得分:2)
您的留言代码看起来不错。
但是,如果要将@message嵌入到动态SQL中,则必须将每个引号加倍。
这是一种手工痛苦。所以,我做了以下几点:
'
),在替换框中添加两个单引号(''
)。