我在T-SQl中有一个类似的记录功能:
CREATE PROCEDURE [logging]
@PROCEDURE VARCHAR(50),
@MESSAGE VARCHAR(MAX)
AS
BEGIN
PRINT @MESSAGE
END;
GO
我可以这样称呼它:
execute logging N'procedure_i_am_in', N'log_message';
由于我的存储过程名称有点长,我想写一个别名或内联函数左右,用我当前的程序为我调用日志记录程序。这样的事情(已经破了):
declare @_log varchar(max)
set @_log = 'execute logging N''procedure_i_am_in'', '
execute @_log N'MESSAGE!'
我会把别名放在每个程序的顶部。
你有什么想法?
答案 0 :(得分:2)
非常简单
CREATE PROCEDURE [logging]
@PROCID int,,
@MESSAGE VARCHAR(MAX)
-- allows resolution of @PROCID in some circumstances
-- eg nested calls, no direct permission on inner proc
WITH EXECUTE AS OWNER
AS
BEGIN
-- you are using schemas, right?
PRINT OBJECT_SCHEMA_NAME(@PROCID) + '.' + OBJECT_NAME(@PROCID);
PRINT @MESSAGE
END;
GO
然后
execute logging @@PROCID, N'log_message';
MSDN OBJECT_SCHEMA_NAME和@@PROCID
编辑:
请注意在事务期间登录表。在回滚时,您将丢失日志数据
答案 1 :(得分:0)
比它的价值更麻烦,但是 它会是
Set @_log = 'exec ....N' + 'MESSAGE!'
Exec (@log)
因此没有太多用处。
就我个人而言,我只是重命名SP,或者使用简洁命名的功能。只有你必须管理风格设施恕我直言
才能构建字符串并执行它们