0

アカウント番号が既存のデータにすでに含まれているかどうかに応じて、データを更新または挿入しようとしています。まず、これを使用して、テーブルにすでにアカウント番号がある変数に新しい変数を追加しました

drop table #test1
select a.*, B.Delq_Sep12, b.Bal_Sep12, b.Queue_Sep12
into #test1
from  pcd1 a
left join #pcd_sep12  b on  (a.ACCOUNT_NUMBER = B.account_number)

次に、アカウント番号がtest1(上記で作成)にないすべてのレコードを#pcd_sep12からtest1に追加します。

INSERT #test1
SELECT * FROM #pcd_sep12 WHERE account_number NOT IN(SELECT account_number FROM #test1)

列名または指定された値の数がテーブル定義と一致しないというエラーが表示されます。

同じ数のフィールドがないのでわかりますが、これを回避する方法はありますか?

4

3 に答える 3

2

MERGE(別名「upsert」)ステートメントを使用してみませんか?

MERGE INTO pcd1 M
USING (SELECT * FROM #pcd_sep12) src ON M.account_number = src.account_number
WHEN MATCHED
-- UPDATE stuff
WHEN NOT MATCHED BY TARGET
-- INSERT stuff;

このように、一時テーブルやテストは必要ありません。これらは、負荷がかかった状態で同時実行に対して安全ではありません。

于 2012-10-16T12:12:35.353 に答える
0

このように列を指定する必要があります

INSERT INTO #test1 (column1, column2, column3)
(SELECT column1, column2, column3 FROM #pcd_sep12 WHERE account_number NOT IN(SELECT account_number FROM #test1))
于 2012-10-16T12:07:18.670 に答える
0

私が間違っていなければ、あなたの#test1テーブルにはpcd1テーブルの列もあります。ただし、2番目のクエリでは、#pcd_sep12からのみ選択しています。

于 2012-10-16T12:09:35.183 に答える