在触发器中引发错误以返回插入行列



我正试图在表上设置一个触发器,以便在满足RaiseError条件时返回字符串中插入行的列值。

我正在努力将列值输入错误消息,我的想法是使用动态SQL,但我无法运行它:

关键字"Select"附近的语法不正确

关于如何运行此功能有什么想法吗?

AFTER INSERT, UPDATE
AS
IF (ROWCOUNT_BIG()  = 0)
RETURN;
ELSE IF EXISTS (SELECT * FROM inserted AS a
WHERE Label  = '0')
BEGIN
DECLARE @Error VARCHAR(100)
DECLARE @UpdateError VARCHAR(100)
DECLARE @Lay_Class VARCHAR(50)
SET @Lay_Class = (SELECT [Lay_Class] FROM inserted);
SET @UpdateError = 'Set @error = ''Error: ' + @Lay_Class + ' New Lay Class, Please add to Case When on Label''';
EXEC sp_executesql @UpdateError;
RAISERROR(@Error, 16, 1);
ROLLBACK TRANSACTION;
RETURN;
END
ELSE ... etc

1(您犯了经典触发器101错误,并将inserted表视为只有一行。它将有与已插入/更新的行一样多的行,您必须相应地处理,即作为基于集合的操作。

2( 如果不混合使用SETSELECT,请使用适当的。

3( 现在建议使用THROW而不是RAISEERROR

以下可以满足您的要求:

IF (ROWCOUNT_BIG()  = 0)
RETURN;
ELSE IF EXISTS (
SELECT * FROM inserted AS a
WHERE Label  = '0'
)
BEGIN
DECLARE @Error varchar(100)
declare @Lay_Class  varchar(50)
select top 1 @Lay_Class = [Lay_Class] FROM inserted where Label  = '0';
set @error = 'Error: ' + @Lay_Class + ' New Lay Class, Please add to Case When on Label';
THROW 51000, @Error, 1;
ROLLBACK TRANSACTION;
END

相关内容

  • 没有找到相关文章

最新更新