我有一个触发条件满足时更新另一个表,但是当它更新它的更新id字段而不是正确的字段需要更新。请看代码并给我一个想法是怎么回事。需要帮助,触发器不能正常工作
在此代码中,cardinfotable.cardID是已更新的。
USE [database]
GO
/****** Object: Trigger [dbo].[trgUpdateCard] Script Date: 2/12/2016 11:05:23 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER TRIGGER [dbo].[trgUpdateCard] on [dbo].[CardHolderTable] After insert
As
Declare @Counter bigint;
Declare @maxRandomValue bigint = 2000, @minRandomValue bigint = 1000;
begin
Select Cast(((@maxRandomValue + 1) - @minRandomValue)
* Rand() + @minRandomValue As bigint) As '@counter'
update cardinfotable
Set CardInfoTable.CardNumber = '@Counter' from cardinfotable
inner join inserted I on I.CardID = CardInfoTable.CardID
where I.Visitor = '1'
END
你有你的变量用引号引用,这使得它一个字符串。更大的问题是,你的代码假设只有一行插入。有可能会(在某些时候)会有多行,您的代码将被破坏。您需要创建触发器作为基于集合的逻辑。 –
这次不确定你是否对基于集合的逻辑是正确的@SeanLange。他的代码可以用于多行插入,它只会更新具有相同计数器值的所有匹配项。这可能是也可能不是理想的行为,没办法知道。 –
是的,它会执行,但我假设他将需要CardInfoTable中每个CardNumber的唯一值。我无法想象事实并非如此。 –