使用执行字符串记录SQL错误
我一直在搜索,似乎找不到从catch中记录执行字符串的答案。我使用了许多存储过程,我希望在发生错误时将错误信息和执行字符串记录到表中。例如,我有一个表:使用执行字符串记录SQL错误,sql,sql-server,string,logging,execution,Sql,Sql Server,String,Logging,Execution,我一直在搜索,似乎找不到从catch中记录执行字符串的答案。我使用了许多存储过程,我希望在发生错误时将错误信息和执行字符串记录到表中。例如,我有一个表: CREATE TABLE dev_error ( error_number INT, error_procedure NVARCHAR(500), error_message NVARCHAR(MAX), .... procedure_call NVARCHAR(MAX) ) 我希望能够将用于调用过程的执行字符串插入到过程调用字段中,但我很难
CREATE TABLE dev_error
(
error_number INT,
error_procedure NVARCHAR(500),
error_message NVARCHAR(MAX),
....
procedure_call NVARCHAR(MAX)
)
我希望能够将用于调用过程的执行字符串插入到过程调用字段中,但我很难找到答案。我曾尝试使用sys.parameters拉取参数并创建字符串,但无法将变量扩展到它所持有的实际值。有没有人对我实现这一点有什么见解。实际上,我是通过写入文件来实现的,但当您想插入到表中时,您可以这样做
CREATE PROCEDURE [dbo].[Procedure1]
@Param1 AS VARCHAR(10)
,@Param2 AS INT
,@Param3 AS DATE
,@Param4 AS MONEY
AS
BEGIN
BEGIN TRY
// Procedure Body
END TRY
BEGIN CATCH
DECLARE @Error_Params AS VARCHAR(MAX) = (SELECT ' @Param1 = ' + @Param1 + ', @Param2 = ' + CAST(@Param2 AS VARCHAR(250)) + ', @Param3 = ' + CAST(@Param3 AS VARCHAR(250)) +', @Param4 = ' + CAST(@Param4 AS VARCHAR(250)))
INSERT INTO dev_error
SELECT ERROR_NUMBER(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_PROCEDURE(), ERROR_LINE(), ERROR_MESSAGE(), @Error_Params
END CATCH
END
您可能不需要过程调用来记录日志。U将使用错误\ U procedure()获取过程名称。只要通过连接输入参数来创建一个字符串,我希望它能够动态执行,这样我就可以在任何过程中输入它。我可以在一个调用中静态地执行此操作,但我想将此逻辑复制到一系列过程中。在不知道输入/输出参数的情况下动态创建此操作的任何想法。我想动态生成它们,以便在多个过程中使用。是的,这是可以做到的。但你到底为什么要这么做?在所有SP的捕获块中,它不是更灵活、优化和结构良好的方式吗?此外,如果您没有在所有sp中执行此操作,您将如何从错误记录sp中找到导致异常的另一个sp?