【发布时间】:2019-09-19 11:29:11
【问题描述】:
我尝试将 sys.dm_exec_describe_first_result_set 与包含表变量的查询一起使用来描述查询的列。 但是在此查询中声明表变量会导致事件 AFTER CREATE_TABLE 的 DATABASE 触发器激活,该事件包含使用临时表调用存储过程。
通常声明此触发器不激活的表变量。一些想法为什么会为表变量激活触发器?
CREATE PROCEDURE SP1 AS
BEGIN
CREATE TABLE #A(b int)
INSERT INTO #A(b) VALUES(1)
DROP TABLE #A
END
GO
CREATE TRIGGER [CreateObjectDatabaseTrigger]
ON DATABASE
AFTER
CREATE_TABLE
AS
BEGIN
EXEC SP1
END
GO
ENABLE TRIGGER [CreateObjectDatabaseTrigger] ON DATABASE
DECLARE @SqlQuery NVARCHAR(MAX) = N'DECLARE @A TABLE (b int) SELECT * FROM @A'
SELECT error_message, name
FROM
sys.dm_exec_describe_first_result_set
(@SqlQuery, NULL, 0)
启用触发器的结果:无法确定元数据,因为过程“SP1”中的语句“INSERT INTO #A(b) VALUES(1)”使用临时表。
【问题讨论】:
标签: sql sql-server triggers