我有一個觸發條件滿足時更新另一個表,但是當它更新它的更新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的唯一值。我無法想象事實並非如此。 –