【发布时间】:2020-08-06 03:08:03
【问题描述】:
我正在测试我的插入语句:
insert into Gebruiker
values ('Sonja123', 'Sonja', 'Van der Vliet', 'kastanjelaan 45',NULL, '3771jx', 'Heteren', 'Nederland', '1980-04-01','Pdel42@hotmail.com', 'WEBM1MAMV', 1, 'Poekie', 'wel')
但是每次我尝试测试它时,我都会收到错误:
将 varchar 值“wel”转换为数据类型 Bit 时转换失败。
我的触发器是:
CREATE TRIGGER TR_CHECKVERKOPER
ON Gebruiker
FOR INSERT
AS
BEGIN
DECLARE @USER_NAME VARCHAR(70)
SET @USER_NAME = (SELECT gebruikersnaam FROM INSERTED)
IF (SELECT Verkoper FROM Gebruiker WHERE gebruikersnaam = @USER_NAME) = 'wel'
BEGIN
IF (SELECT COUNT(*) FROM Verkoper WHERE Gebruiker = @USER_NAME) = 0
BEGIN
UPDATE Gebruiker SET Verkoper = 'niet' WHERE gebruikersnaam = @USER_NAME
END
END
END
GO
我该如何解决?
【问题讨论】:
-
SQL Server 触发器 101:插入的表可以有多行吗?所以你的触发器从一开始就坏了。
-
所以要生成错误列
Verkoper必须是bit数据类型。我刚刚测试了自己,这正是发生的事情。把Verkoper改成字符串类型就可以了。 -
插入的表可以有多行吗?是的
-
^^^ 但您的代码仅处理 1 行,例如
SET @USER_NAME = (SELECT gebruikersnaam FROM INSERTED)因为一个变量只能包含一个值。 -
触发器每个 statement 触发一次,而不是 row。如果
insert语句添加 42 行,则inserted将包含 42 行。如果您的触发器绝对不能处理多于一行,那么它应该检查行数并使用throw(或RaIsError)表示存在未解决的问题。
标签: sql sql-server tsql database-trigger