gpt4 book ai didi

SQL 在触发器中使用临时表

转载 作者:行者123 更新时间:2023-12-03 23:32:23 26 4
gpt4 key购买 nike

我在 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

触发器执行后,t2 表为空。为什么是空的?

如果我在没有触发器的情况下执行上面的查询,则 t2 表会被填充。

在触发器中使用临时表有什么问题吗?

最佳答案

Damien 的回答是正确的:您可以在触发器中使用临时表,但强烈建议在此处定义它们,因为触发器可以在各种上下文中触发。

如果您在触发器中使用临时表,请检查临时表是否存在,因为您无法控制上下文并且它可能已经存在:

IF OBJECT_ID('tempdb..#pys') IS NOT NULL
DROP TABLE #pys

此外,可以动态创建临时表:

SELECT * INTO #tmp
FROM inserted

当触发器包含需要访问在动态 SQL 范围内不可见的插入或删除的特殊表的动态 SQL 时,这特别有用。

避免使用##tmp(全局临时变量),因为它们是全局可见的,当多个 SPID 触发您时可能会导致问题。

关于SQL 在触发器中使用临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com