【发布时间】:2014-10-24 10:34:12
【问题描述】:
我正在创建一个处理临时表 (#attributeType) 的触发器。由于触发器可以被多次调用,我想确定并检查临时表#attributeType 是否仍然存在。
这是我在触发器主体中检查临时表的代码:
IF OBJECT_ID('tempdb..#attributeType') IS NOT NULL
BEGIN
DROP TABLE #attributeType
SELECT * INTO #attributeType
FROM attributeType
PRINT 'IN IF'+ CAST(OBJECT_ID('tempdb..#attributeType') AS NVARCHAR(80))
END
ELSE
BEGIN
SELECT * INTO #attributeType
FROM attributeType
PRINT 'IN ELSE'+ CAST(OBJECT_ID('tempdb..#attributeType') AS NVARCHAR(80))
END
当我通过 F5 选择代码来测试代码时,我收到此错误消息,指出 #attributeType 临时表存在:
Msg 2714, Level 16, State 1, Line 11
There is already an object named '#attributeType' in the database.
我知道在存储过程中 #tempTables 将在 sp 结束后立即被删除,但我仍然不明白为什么我的代码是错误的?
注意 当我注释掉 ELSE 块时,代码可以工作。
【问题讨论】:
标签: sql-server tsql triggers exists temp-tables