2017-03-12 5 views
0

列内の特定のコードが入力されたときにトリガーを処理するための更新があります。アフタートリガーで挿入されたテーブルの列を参照する方法

The multipart identifier "inserted.contact" could not be bound.

任意のアイデアどのようにトリガを挿入テーブル内の列を参照するために:私は挿入タイプintellisenceのドロップダウンリストに表示さ挿入されたテーブルを参照するとき、私はエラーを取得しますか?また、挿入されたテーブルを既存のテーブルよりも使用するほうがなぜ優れていますか?

使用PCUnitTest GO

UPDATE P 
SET 
    P.First_Name = T.ForeName 
    ,P.Middle_Name = T.Middle_Name 
    ,P.Last_name = T.Surname 
FROM GMUnitTest.dbo.Contact1 C 
INNER JOIN PCUnitTest.dbo.People P 
    ON P.People_ID = C.Key4 
CROSS APPLY dbo.NameParser(inserted.Contact) T --"the multipart identifier "inserted.contact" could not be bound" 
WHERE C.Key1 = '76' 
; 
+0

データレイアウトに関する詳細情報を入力してください。 –

答えて

0

あなただけの任意のテーブルのようにinsertedに持ち込む:

UPDATE P 
    SET P.First_Name = T.ForeName, 
     P.Middle_Name = T.Middle_Name, 
     P.Last_name = T.Surname 
FROM PCUnitTest.dbo.People P JOIN 
    GMUnitTest.dbo.Contact1 C 
    ON P.People_ID = C.Key4 JOIN 
    inserted i 
    ON i.?? = c.?? CROSS APPLY 
    dbo.NameParser(i.Contact) T 
WHERE C.Key1 = '76'; 

唯一の問題は、あなたがJOINのために使用するものの列です。 ??は列名用です。

+0

ありがとう、私はそれが連絡先1テーブルから挿入されたテーブルを知っていますか? contact1はユーザーが更新したばかりのテーブルなので、新しい値が挿入されたテーブルにあるため、クエリに含める必要はありません。私はこれを使用するように見えます。 UPDATE P SET P.First_Name = T.ForeName 、P.Middle_Name = T.Middle_Name 、P.Last_name = T.Surname PCUnitTest.dbo.People P INNER JOIN FROM I ON i.KEY4 =挿入P.People_ID CROSS適用dbo.NameParser(i.Contact)T WHERE i.Key1 = '76 -ENR ' とP.PEOPLE_ID = i.KEY4 – ERPISE

+0

@ERPiseもう一度! 'Inserted'テーブルは、' INSERT'または 'UPDATE'ステートメントの後にのみデータが挿入されます。これが 'Contact1'のトリガーであれば、そのテーブルでそのようなステートメントが実行されるたびに' INSERT'または 'UPDATE'の行が挿入されます。そのようなステートメントが他のテーブルに対して実行された後、トリガは 'Inserted'テーブルから値をキャッチしません**。 – 3BK

関連する問題