SQL 带有错误消息的服务器触发器
SQL Server trigger with error message
我写了一个触发器,如果在两列中发现重复记录,它会阻止。
如何将导致重复的消息中的行抛出。
我正在尝试在错误消息中显示这些错误行。
代码:
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
更改触发器的逻辑,使其执行 EXISTS(或者从 table 中提取一些值与插入的虚拟 table 连接,如果您想特别提及一些/所有错误值在错误消息中),如果值已经存在,则调用 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
我写了一个触发器,如果在两列中发现重复记录,它会阻止。
如何将导致重复的消息中的行抛出。 我正在尝试在错误消息中显示这些错误行。
代码:
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
更改触发器的逻辑,使其执行 EXISTS(或者从 table 中提取一些值与插入的虚拟 table 连接,如果您想特别提及一些/所有错误值在错误消息中),如果值已经存在,则调用 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