带有错误信息的SQL Server触发器
问题描述:
我写了一个触发器,它在两列中找到时会阻止重复记录。带有错误信息的SQL Server触发器
我该如何将消息中的行引起重复。 我想在错误消息中显示那些错误行。
代码:
CREATE TRIGGER [dbo].[BlockDuplicates]
ON [dbo].[table]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 1 FROM inserted AS i
INNER JOIN dbo.WSP_INPUT_ACTV AS t
ON i.GoogleID = t.GoogleID
AND i.SKU = t.SKU
WHERE i.FleetID <> 008
)
BEGIN
INSERT dbo.WSP_INPUT_ACTV (COL1,COL2,COL3)
SELECT COL1,COL2,COL3 FROM inserted;
END
ELSE
BEGIN
PRINT 'INSERTION ABORTED';
END
END
答
更改您的触发周围的逻辑,所以它的存在时(或拉动表中的某些数值加入王氏插入的虚拟表,如果你想特别提到的一些/所有的坏值在错误消息中),并且如果值已经存在,则调用RAISERROR后跟ROLLBACK TRANSACTION
如果没有值,则完成触发器并插入/提交您的值。像这样的东西(可能需要一点调试,目前在iPad上,对不起),但注意它只选择一个坏对。如果你希望你的错误消息,包含所有坏的对,也可能是huuuuuge ..
CREATE TRIGGER [dbo].[BlockDuplicates]
ON [dbo].[table]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @dupes VARCHAR(100);
SELECT @dupes = MAX(CONCAT(I.GoogleID, '/', I.sku)) FROM inserted AS i
INNER JOIN dbo.WSP_INPUT_ACTV AS t
ON i.GoogleID = t.GoogleID
AND i.SKU = t.SKU
WHERE i.FleetID <> 008
)
IF @dupes IS NULL THEN
BEGIN
INSERT dbo.WSP_INPUT_ACTV (COL1,COL2,COL3)
SELECT COL1,COL2,COL3 FROM inserted;
COMMIT TRANSACTION;
END
ELSE
BEGIN
RAISERROR('CONCAT(googleid/sku pair ',@dupes,' is already present'),-1,-1);
ROLLBACK TRANSACTION;
END
END
添加有关为什么要使用触发此预期输出 –
更多的细节?因为您可以在插入存储过程中执行此操作。 –
这可以使非重复记录也不会因为批次中存在一个重复存在而被插入 –