我的存储过程中有一个代码:
create procedure [dbo].[add_codes](@codes code_type readonly, @id int)as
insert into codes(code,value)
select code,'' value from @codes
where code not in (select code from codes)
这应该只插入新值,忽略重复但是没有重复,当我检查代码和不同代码的数量时,在一些插入后,它们具有不同的值。我的代码出了什么问题?
答案 0 :(得分:4)
NOT IN
应该工作,但对于像这样简单的事情,您可以执行以下操作:
INSERT INTO codes (code, value)
SELECT DISTINCT
code,
'' AS value
FROM @codes AS n
LEFT JOIN codes AS c
ON n.code = c.code
WHERE c.code IS NULL
当然,在表上设置UNIQUE
约束也是值得的。。
答案 1 :(得分:0)
NOT IN
工作。如果NULL
中只有一个codes
值,则NOT IN
的行为有点违反直觉。 工作,但它总是返回" false"。这是因为NULL
不是特定值,而是未知值。
如果您使用not in
:
create procedure [dbo].[add_codes](@codes code_type readonly, @id int)
as begin
insert into codes(code,value)
select code,'' value from @codes
where code not in (select code from codes where code is false);
end;
我非常同意Rowland的观点,正确的方法是使用unique
约束你想要独特的列。