Tsql 如何检索存储过程的输入参数值

Tsql 如何检索存储过程的输入参数值,tsql,sql-server-2012,Tsql,Sql Server 2012,我想创建一个审计过程,它将在数据库中所有过程的catch块中调用 我想在这个审计数据库中存储所有输入参数及其值的列表 请建议我如何在SQL Server中实现这一点,我不知道如何通过编程检索存储过程的参数列表及其值(可能涉及n个系统表等)。如果不涉及到这种复杂程度,并且有可能改变当前的程序,您可以按照下面的行做一些事情 ALTER现有的存储过程,以添加一个小功能,您可以使用 设置字符串格式(“@paramname=paramvalue”)的参数及其在当前进程中的值 然后,如果控件到达CATCH块

我想创建一个审计过程,它将在数据库中所有过程的catch块中调用

我想在这个审计数据库中存储所有输入参数及其值的列表


请建议我如何在SQL Server中实现这一点,我不知道如何通过编程检索存储过程的参数列表及其值(可能涉及n个系统表等)。如果不涉及到这种复杂程度,并且有可能改变当前的程序,您可以按照下面的行做一些事情

ALTER
现有的存储过程,以添加一个小功能,您可以使用
设置字符串格式(
“@paramname=paramvalue”
)的参数及其在当前进程中的值 然后,如果控件到达
CATCH
块,则触发审核过程

--Add this code bit on top of the proc from where you want the Audit Proc to be fired

--Declare and insert into a table variable
Declare @ParamValues TABLE (params varchar(400))

insert into @ParamValues
select '@id = '+ @id  UNION
select '@name  = '+ @name  UNION
select '@date = '+ @date

GO

...
....
END TRY

begin catch --Auditing proc code below
exec AuditDB.dbo.AuditProc @ParamValues, 
     OBJECT_NAME(@@PROCID) --this returns the name of current proc 
end catch

-------
-------Create the requisite SQL objects
-------
CREATE TABLE AuditDB.dbo.AuditTable
(
    AuditMessage varchar(400),
    ProcName varchar(200),
    DateTimeStamp DateTime
);
GO
CREATE TYPE AuditDB.dbo.ParamValuesType AS TABLE
(
    params varchar(400)
);
GO
CREATE PROCEDURE AuditDB.dbo.AuditProc
    @ParamValues dbo.ParamValuesType READONLY
    ,@ProcName varchar(200)
AS

BEGIN --Add whaterver lines of code required, this is just a basic version.
    INSERT INTO AuditDB.dbo.AuditTable      
    SELECT params, @ProcName, cast(getdate() as datetime) FROM @ParamValues
END;

表示您希望在所有程序的catch块中执行一个程序??是的,Krish Kvr,我正在寻找一些通用程序,这些程序将从catch块调用,并且该程序的输入可以从一些系统程序中派生出来。谢谢您的建议。但这里的挑战是捕获表类型变量信息。此外,由于大多数程序已经实现,代码也会有很多变化,我正在尝试开发一个日志系统,该系统可以捕获所有输入信息以重新处理问题。请让我知道,如果你有任何其他的方法继续进行