我为此触发将新的PersonID插入客户表:
CREATE TRIGGER [dbo].[tr_insert_PersonID] ON [dbo].[CustomersTB]
instead of INSERT
as
BEGIN
declare @PersonID int;
select @PersonID = (select PersonID from inserted)
if (@PersonID<=999999999) and
(not EXISTS (Select PersonID From [dbo].[CustomersTB] where @PersonID = [dbo].[CustomersTB].PersonID))
begin
.
.
end
END
当手动插入一个PersonID时它起作用,但是当尝试从其他表插入时,出现此错误:
子查询返回了多个值。当 子查询遵循=,!=,<,<=,>,> =,或当子查询用作 表达式。
指向该行:
select @PersonID =(从插入的列表中选择PersonID)
不知道要更改什么以及如何更改它
答案 0 :(得分:3)
到目前为止,评论中所写的所有内容(当前的最后一条评论是Damien关于ISNUMERIC
的回答您不想问的问题),
似乎您正在使用instead of
触发器进行验证-在这种情况下,您选择了错误的工具来完成这项工作。
除非常特殊的情况外,应使用约束条件进行验证。
在这种情况下,您首先应确保为PersonId
使用了正确的数据类型。
如果要使用数字,请使用数字数据类型。如果您希望它是一个整数,请使用int
(如果是非常大的整数,请使用bigint
)。
如果您希望它是唯一的,请向其添加一个unique index或unique constraint,或考虑它是否应该是表的primary key(根据定义是唯一的)。
如果您希望它是一个至少9位数字的数字,请添加一个check constraint,该数字将拒绝100,000,000
下的任何值。