ERPise。
あなたは実際に誤解のように見えるだけでなく、ここでいくつかの構文エラーがあります。
まず、あなたのクエリが2つのWHERE
句があります。
FROM CONTACT1 c
WHERE (c.KEY1 = p.PEOPLE_ID); --1
CROSS APPLY dbo.NameParser(c.Contact) T
WHERE p.PEOPLE_ID = c.KEY4 --2
EAKチームはまた、あなたの悩みを与えるセミコロンに関する権利です。元のエラーメッセージでした。その向こう
、あなたはがP
としてエイリアスにを試してみましたSISUnitTest.dbo.People
にINSERT
を行っています。重複しているWHERE
句の結合条件は、PCUnitTest.dbo.People AS P
だった元の更新クエリのテーブルの単純なコピー&貼り付けのようですので、これらの条件が適切ではないかと思います。 SISUnitTest.dbo.People
にはPCUnitTest.dbo.People
と同じフィールドがありますか?何がしたいことはSISUnitTest.dbo.People
にPCUnitTest.dbo.People
とGMUnitTest.dbo.Contact1
から挿入するのであれば
、それは可能ですが、あなたはので、コメントアウトされている。このような何か(あなたのオリジナルラインのカップルにクエリを再構築する必要があるとしています彼らは)彼らの間違いを持っているように見える:
--INSERT INTO SISUnitTest.dbo.PEOPLE p (p.LAST_NAME, p.FIRST_NAME, p.LAST_NAME)
INSERT INTO SISUnitTest.dbo.People (First_Name,Middle_Name,Last_Name)
SELECT
T.ForeName
,T.Middle_Name
,T.Surname
FROM GMUnitTest.dbo.Contact1 C
INNER JOIN PCUnitTest.dbo.People P
ON P.People_ID = C.Key4
CROSS APPLY dbo.NameParser(C.Contact) T
WHERE C.Key1 = '76-ENR'
;
--AND P.PEOPLE_ID = C.KEY4
--This condition is already included in the INNER JOIN three lines up
あなたは同じリストがPCUnitTest.dbo.People
などGMUnitTest.dbo.Contact1
の両方に存在することを確認するためにそれを使用している場合を除きこれは、この形式では、INNER JOIN
はすべてが、無用であることは注目に値します。それが問題でない場合は、単にこのクエリからINNER JOIN
を削除することができます。
注意あなたのdbo.NameParser()
関数は常に3行(ForeName、Middle_Name、Surname)を返すようです。このような場合、INSERT
ステートメントでこのように使用すると、解析するすべての名前に対して3つの行が挿入される可能性が高くなります。
以前の回答で示唆したように、dbo.NameParser
に2番目のパラメータを追加して、名前の特定の部分を要求できるようにすることをお勧めします。これにより、単一の行を挿入することができます。
INSERT
を除いて、上記のクエリの一部だけを実行して、いくつかのランダムなエントリに返される内容を確認することをお勧めします。私は、あなたが私が何を話しているのを見ることを期待しています。
出典
2017-03-13 07:00:51
3BK
ありがとう、はい私はt-sqlを使用した最後の時間90年代になると2005年にクロス・アプライが追加されました。その文字列'76 -ENR 'には3つのマッチがあるので3行戻ってくると思います。キーを追加して3行戻ってくるかどうかを確認します。また、これは挿入および更新トリガーで使用されるいくつかのコードです。だから、私はスクリプトでコードをテストする方法を見つけていない。私はいくつかのテストコードを書き続け、それを挿入するように変更します。 WHERE C.Key1 = '76 -ENR ' AND P.PEOPLE_ID = C.KEY4 – ERPISE
挿入されたテーブルを参照するスクリプトを実行すると、メッセージに「無効なオブジェクト名が挿入されました」というメッセージが表示されます。挿入されたテーブルをテストスクリプトで使用するコードをテストする方法はありますか、それともプロセス内で実行する唯一の方法ですか? iは INNER P.People_ID ON PCUnitTest.dbo.People P をJOIN挿入FROM INSERT INTO SISUnitTest.dbo.People(FIRST_NAME、MIDDLE_NAME、LAST_NAME) T.ForeName、T.Middle_Name 、T.Surname を選択 = i.Key4 CROSS適用dbo.NameParser(i.Contact)T WHERE i.Key1 = '76 -ENR ' AND P.PEOPLE_ID = i.KEY4 – ERPISE
@ERPise「Inserted」テーブルを使用しませんでした。あなたが「トリガー」について話していなかったので、私の質問。これが 'TRIGGER'の場合は、クエリが異なります。 'TRIGGER'のコメントに投稿したクエリには何も問題はありませんが、同じクエリをスタンドアロンで実行することはできません。なぜなら、' Inserted'テーブルを参照できるようにすることはできないからです。それを通常のクエリとして実行するだけです。これは 'TRIGGER'ですか、それとも通常のクエリですか? – 3BK