Bas*_*eeb 1 sql sql-server triggers hashtable sql-server-2008-r2
我在MSSQL Server 2008R2中有一个触发器:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trg_HosFile_Delete]
ON [dbo].[hosfile] FOR DELETE
AS
insert into #pys(pyGuid)
SELECT EntryGuid AS pyGuid FROM er000 AS er
insert into t2(C1) select pyGuid from #pys
Run Code Online (Sandbox Code Playgroud)
触发器执行后,t2
表为空。为什么它是空的?
如果我在没有触发器的情况下执行以上查询,则t2
表将被填充。
在触发器中使用临时表有什么问题吗?
Damien的答案是正确的:您可以在触发器中使用临时表,但强烈建议在其中使用临时表,因为触发器可以在各种情况下触发。
如果在触发器中使用临时表,请检查临时表是否存在,因为您无法控制上下文,并且它可能已经存在:
IF OBJECT_ID('tempdb..#pys') IS NOT NULL
DROP TABLE #pys
Run Code Online (Sandbox Code Playgroud)
另外,可以动态创建临时表:
SELECT * INTO #tmp
FROM inserted
Run Code Online (Sandbox Code Playgroud)
当触发器包含需要访问在动态SQL范围中不可见的插入或删除的特殊表的动态SQL时,此功能特别有用。
避免使用## tmp(全局临时变量),因为它们是全局可见的,并且在触发多个SPID时可能导致麻烦。
归档时间: |
|
查看次数: |
15508 次 |
最近记录: |