我有两个表,Contacts和Contacts_Detail。我将记录导入到Contacts表中,需要运行SP以在Contacts_Detail表中为Contacts中的每个新记录创建记录。 Contacts表中有一个ID,Contacts_Detail表中有一个匹配的ID_D。
我正在使用它将记录插入Contacts_Detail,但获取“子查询返回的值超过1”。错误,我无法弄清楚为什么。联系人中有多个记录需要在Contacts_Detail中具有匹配的记录。
Insert into Contacts_Detail (ID_D)
select id from Contacts c
left join Contacts_Detail cd
on c.id = cd.id_d
where id_d is null
我愿意接受更好的方式...... 谢谢。
答案 0 :(得分:0)
听起来你正在将空白子记录插入到Contacts_Detail表中 - 所以我要问的第一个问题是:为什么?
至于为什么你的特定SQL不起作用......
您可以检查一些事项:
WHERE id is null
的任何记录吗?
(删除它们 - 然后将id字段作为主键)WHEERE id_d is null
的记录吗?
(删除它们 - 然后进入你的设计师并建立一种关系
/强制参照完整性。)希望有所帮助
答案 1 :(得分:0)
为什么不只是一个触发器?这似乎比必须确定哪些行丢失更简单 - 这似乎更像是你会定期纠正某些异常的事情,而不是每次插入后你都应该做的事情。这样的事情应该有效:
CREATE TRIGGER dbo.NewContacts
ON dbo.Contacts
FOR INSERT
AS
BEGIN
INSERT dbo.Contacts_Detail(ID_D) SELECT ID FROM inserted;
END
GO
但是我怀疑你在Contacts_Detail
表上有一个触发器,它没有被写入以正确处理多行插入,而这正是你的子查询错误的来源。你能在Contacts_Detail
上显示触发器吗?