0

我有两个表,Contacts 和 Contacts_Detail。我正在将记录导入到 Contacts 表中,并且需要运行 SP 以在 Contacts_Detail 表中为 Contacts 中的每条新记录创建一条记录。Contacts 表中有一个 ID,Contacts_Detail 表中有一个匹配的 ID_D。

我正在使用它将记录插入 Contacts_Detail 但得到“子查询返回超过 1 个值”。错误,我不知道为什么。Contacts 中有多个记录需要在 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

我愿意接受更好的方式......谢谢。

4

2 回答 2

0

听起来您正在将空白子记录插入到 Contacts_Detail 表中——所以我要问的第一个问题是:为什么?

至于为什么您的特定 SQL 不起作用...

您可以检查几件事:

  • 联系人表 - 你那里有任何记录WHERE id is null吗?(删除它们——然后将 id 字段设为主键)
  • Contacts_Detail 表——那里有记录WHEERE id_d is null吗?(删除它们——然后进入您的设计器并创建关系/强制参照完整性。)
  • 验证 c.id 是主键,cd.id_d 是关联表的正确外键。

希望有帮助

于 2012-06-25T23:51:52.107 回答
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吗?

于 2012-06-26T01:47:04.423 回答