我有一个CLR触发器,它首先要做的是获取与触发器关联的表名,如下所示:
public static void MyTrigger()
{
using (SqlConnection conn = new SqlConnection(@"context connection=true"))
{
conn.Open();
command.CommandText = @"SELECT object_name(resource_associated_entity_id) FROM sys.dm_tran_locks WHERE request_session_id = @@spid and resource_type = 'OBJECT'";
string tableName = command.ExecuteScalar().ToString();
//etc...
}
}
第一次执行触发器时,上述命令返回的表名始终为syscolpars
。如果再次执行触发器,则表名称将正确返回。
数据库引擎是SQL Server 2014 Express。
为什么会这样?