c# - 如何识别调用存储过程

标签 c# sql-server tsql

我希望向特定存储过程添加一些日志记录,该存储过程被 20 个数据库中的大约 5000 个存储过程交叉调用。

我想做的是在被调用的存储过程的顶部添加如下内容:

插入 callLog 值(@@caller, getdate())

所以过了一会儿,我可以得到一个很好的列表,列出所有调用这个的存储过程。

任何人都可以帮我处理@@caller 部分吗?

最佳答案

尝试

SELECT @caller = OBJECT_NAME(@@PROCID)

编辑: 在你得到当前的过程之后。 name,将其作为参数传递给 log sp,就这样。

这只适用于存储过程。

一个使用这个的例子

USE AdventureWorks;
GO
IF OBJECT_ID ( 'usp_FindName', 'P' ) IS NOT NULL 
DROP PROCEDURE usp_FindName;
GO
CREATE PROCEDURE usp_FindName
    @lastname varchar(40) = '%', 
    @firstname varchar(20) = '%'
AS
DECLARE @Count int;
DECLARE @ProcName nvarchar(128);
SELECT LastName, FirstName, Phone, EmailAddress
FROM Person.Contact 
WHERE FirstName LIKE @firstname AND LastName LIKE @lastname;
SET @Count = @@ROWCOUNT;
SET @ProcName = OBJECT_NAME(@@PROCID);
RAISERROR ('Stored procedure %s returned %d rows.', 16,10, @ProcName, @Count);
GO
EXECUTE dbo.usp_FindName 'P%', 'A%';

更多关于这个

http://msdn.microsoft.com/en-us/library/ms174408(SQL.90).aspx

有关存储过程日志记录的示例。可能有用

http://weblogs.sqlteam.com/brettk/archive/2006/09/21/12391.aspx

这里还有一个相关的问题

Can a MS/Transact-SQL stored procedure look up its own name?

EDIT 2: 和 SO 中的其他相关问题

Find out the calling stored procedure in SQL Server

关于c# - 如何识别调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509305/

相关文章:

c# - 在 CommandText 中使用 SQL 语句选择字段,c#

c# - 在 MVC/C# 中格式化字符串

sql-server - 根据 is null 查询的结果将列更新为 BIT 值

sql-server - 水平连接两个查询

sql - 改进我的 SQL Select 语句以选择尚未完全完成某个部分的学生

c# - 如何使用 webdav 将文件上传到文件夹?

c# - 为什么 AcquireTokenByAuthorizationCode 不返回 RefreshToken

c# - 字符串太长时无法执行查询

SQL 使用 CASE 语句更新列中的行

sql - 在 T-SQL 中替换没有游标的字符串中出现的字符串列表