0

連絡先と連絡先_詳細の2つのテーブルがあります。レコードを連絡先テーブルにインポートしています。SPを実行して、連絡先の新しいレコードごとに、Contacts_Detailテーブルにレコードを作成する必要があります。連絡先テーブルにIDがあり、Contacts_Detailテーブルに一致するID_Dがあります。

これを使用してレコードをContacts_Detailに挿入していますが、「サブクエリが複数の値を返しました」を取得します。エラーと私は理由を理解することはできません。連絡先には複数のレコードがあり、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が機能しない理由について...

あなたが確認できるいくつかのこと:

  • Contacts テーブル -- レコードはあり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 に答える