Sql server T-SQL更新触发器帮助
嗨,我正在尝试在我的数据库中创建更新触发器。 但每次触发器触发时,我都会出现这个错误 错误消息:更新或删除的行值不会使该行唯一,或者会更改多行(3行) 这是我的扳机Sql server T-SQL更新触发器帮助,sql-server,tsql,Sql Server,Tsql,嗨,我正在尝试在我的数据库中创建更新触发器。 但每次触发器触发时,我都会出现这个错误 错误消息:更新或删除的行值不会使该行唯一,或者会更改多行(3行) 这是我的扳机 ALTER TRIGGER [dbo].[x1pk_qp_update] ON [dbo].[x1pk] FOR UPDATE AS BEGIN TRY DECLARE @UserId int , @PackareKod int , @PersSign varchar(10) SEL
ALTER TRIGGER [dbo].[x1pk_qp_update]
ON [dbo].[x1pk] FOR UPDATE
AS
BEGIN TRY
DECLARE @UserId int
, @PackareKod int
, @PersSign varchar(10)
SELECT @PackareKod = q_packarekod
, @PersSign = q_perssign
FROM INSERTED
IF @PersSign IS NOT NULL
BEGIN
IF EXISTS (SELECT * FROM [QPMardskog].[dbo].[UserAccount] WHERE [Account] = @PackareKod)
BEGIN
SET @UserId = (SELECT [UserId]
FROM [QPMardskog].[dbo].[UserAccount]
WHERE [Account] = @PackareKod)
UPDATE [QPMardskog].[dbo].[UserAccount]
SET [Active] = 1
WHERE [Account] = @PackareKod
UPDATE [QPMardskog].[dbo].[User]
SET [Active] = 1
WHERE [Id] = @UserId
END
END
END TRY
但是我只更新了表中的一行,它怎么会说是3行呢。请告知。好吧,您的声明如下:
SELECT @PackareKod = q_packarekod, @PersSign = q_perssign
FROM INSERTED
似乎假定将为UPDATE语句中的每一行调用UPDATE触发器。事实并非如此-UPDATE触发器只调用一次,并且插入的伪表包含三行
因此,您需要更改逻辑,以便能够处理插入的表中的多个条目。那么,您在这里的陈述:
SELECT @PackareKod = q_packarekod, @PersSign = q_perssign
FROM INSERTED
似乎假定将为UPDATE语句中的每一行调用UPDATE触发器。事实并非如此-UPDATE触发器只调用一次,并且插入的伪表包含三行
因此,您需要更改逻辑,以便能够处理插入的表中的多个条目。您需要将其作为一个集合进行处理,它应该只有两个UPDATE语句,没有变量,没有,如果
s,所有必要的条件都在UPDATE join和WHERE逻辑中:
ALTER TRIGGER [dbo].[x1pk_qp_update]
ON [dbo].[x1pk] FOR UPDATE
AS
BEGIN TRY
UPDATE u
SET [Active] = 1
FROM [QPMardskog].[dbo].[UserAccount] u
INNER JOIN INSERTED i ON u.[Account]=i.q_packarekod
WHERE i.q_perssign IS NOT NULL
UPDATE u
SET [Active] = 1
FROM [QPMardskog].[dbo].[User] u
WHERE [Id] IN (SELECT [UserId]
FROM [QPMardskog].[dbo].[UserAccount]
WHERE [Account] IN (SELECT q_packarekod
FROM INSERTED
WHERE q_perssign IS NOT NULL
)
)
END TRY
如果我正确地翻译了If和join逻辑,这将处理一次更新的[dbo].[x1pk]的1行和/或多行。您需要将其作为一个集合处理,它应该只有两个UPDATE语句,没有变量,没有If
s,所有必要的条件都在UPDATE join中,其中逻辑:
ALTER TRIGGER [dbo].[x1pk_qp_update]
ON [dbo].[x1pk] FOR UPDATE
AS
BEGIN TRY
UPDATE u
SET [Active] = 1
FROM [QPMardskog].[dbo].[UserAccount] u
INNER JOIN INSERTED i ON u.[Account]=i.q_packarekod
WHERE i.q_perssign IS NOT NULL
UPDATE u
SET [Active] = 1
FROM [QPMardskog].[dbo].[User] u
WHERE [Id] IN (SELECT [UserId]
FROM [QPMardskog].[dbo].[UserAccount]
WHERE [Account] IN (SELECT q_packarekod
FROM INSERTED
WHERE q_perssign IS NOT NULL
)
)
END TRY
如果我正确地翻译了If和join逻辑,这将处理一次更新的[dbo].[x1pk]的1行和/或多行。它可以更新1条以上的记录。您可以从最后一条记录中选择@PackareKod和@perSign。它可以更新1条以上的记录。您从最后一条记录中选择了@PackareKod和@perSign。不,它不起作用。我收到相同的错误消息:错误消息:更新或删除的行值不是使行唯一,就是更改了多行(3行)。我不明白为什么我会收到这个错误消息。我只更新了x1pk表中的一行。为什么是说3排。还有其他建议。感谢您的努力,.Nope it’s not work我收到相同的错误消息:错误消息:更新或删除的行值不是使行唯一,就是更改了多行(3行)。我不明白为什么我会收到这个错误消息。我只更新了x1pk表中的一行。为什么是说3排。还有其他建议。谢谢你的努力,。