【发布时间】:2011-11-07 16:40:23
【问题描述】:
如果我在表上创建了一个“插入后”触发器,并且在该触发器中我执行了一个 While 循环以迭代“可能”多行,那么处理负载会是什么?
最终结果是我将有 99.999% 的时间只有 1 行,但由于未来不可预测,我也希望能够处理插入的多行。
触发器型号: 1) 向表中插入信息 2) 通过存储过程(如果可能)创建特定于客户端的视图
你说什么? :)
尚未完全开发,但这是我正在寻找的设计,可能结构上不合理,但应该明白这一点。
CREATE TRIGGER dbo.New_Client_Setup
ON dbo.client
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
--Fill Temp Table
select * into #clients
from inserted
--Iterate through Temp Table
While (select count(*) from #clients) <> 0 BEGIN
declare @id int, @clnt nvarchar(10)
select top(1)
@id = id
, @clnt = short
order by id desc
Execute dbo.sp_Create_View_Client ( @id, @clnt )
-- Drop used ID
delete from #clients
where id = @id
END
Drop table #clients
END
GO
再次,观察触发器的设计不一定是语法糖
【问题讨论】:
-
触发器中的
WHILE循环是一个非常糟糕的想法,并且对您的数据库设计来说是一种代码味道。如果您的设计需要这个,那么某处出现了严重错误。 -
是的,这是我所知道的,但似乎是处理插入多行可能性的唯一解决方案。因为我正在研究 SQL 2005 Std。
-
如果您发布代码,那么也许有人会向您展示不同的可能性。
-
@BalamBalam - 在 SQL Server 中,每个原子操作(插入、删除、更新)触发一次触发器 - 受影响行的结果集存储在特殊的
deleted和inserted表中跨度> -
你可以
Joininserted-table 而不是创建一个新的临时表。这应该适用于 SQL 2005 Std。没有问题。 msdn.microsoft.com/en-us/library/ms191300%28v=sql.90%29.aspx
标签: tsql stored-procedures sql-server-2005 triggers