我有两个表A和B,需要从A到B插入记录(少数列不是全部)。 我当然可以这样做:
INSERT INTO B (col2)
SELECT DISTINCT col2
FROM A
但是,表B中的Col1(名为ID)的类型为INT,因此导致此错误:
Msg 515,Level 16,State 2,Line 1
无法将值NULL插入列'ID',表'MyDB.dbo.Visitor';列不允许空值。 INSERT失败。
如何让SQL Server忽略此列并只插入我需要的数据?
感谢。
答案 0 :(得分:0)
主键必须满足两个条件:
NULL
。这是因为在主键中允许NULL
值会使主键的唯一性无法保持,因为NULL
值不等于任何其他值,包括其他NULL
。
引自here:
唯一键约束在实践中并不意味着
NOT NULL
约束。由于NULL
不是实际值(它表示缺少值),因此当比较两行并且列中的两行都有NULL
时,列值不会被视为相等。因此,为了使唯一键能够唯一标识表格中的每一行,不得使用NULL
值。
答案 1 :(得分:0)
假设您没有在B:
中插入重复项,这应该可行INSERT INTO B (col2)
SELECT DISTINCT col2
FROM A
WHERE col2 IS NOT NULL
答案 2 :(得分:0)
将表B中的ID列设置为"自动递增"。
答案 3 :(得分:0)
如果您将ID
列定义为IDENTITY
ID
列提供唯一值
在您的情况下,您可以计算IDENTITY
列的最大值,并从超过该最大值的值开始{{1}}。
有关此类代码,请参阅SQL Server, How to set auto increment after creating a table without data loss?的已接受答案。
答案 4 :(得分:-1)
您需要在两个表之间创建关系并执行更新语句。
更新表b从表a中设置valueb = valuea,其中a.id = b.id
你还需要重新思考一下你的设计。