2017-03-08 9 views
1

私はテストしようとしているクエリを持っています。既存の主キーを使用してテーブル内のデータを検出した場合、クエリはデータを更新する必要があります。そうでなければ、テーブルに挿入します。Mergeと一致したクエリエラーが発生するSQLサーバ

プライマリキーはint型で、私が見ることができるプロパティでIDが "True"に設定されていると仮定します。これは、挿入されたプライマリの新しいIDを自動的に設定することを意味します。

MERGE INTO Test_table t 
USING (SELECT 461232 ID,'Test1-data' Fascia FROM Test_table) s 
ON (t.ID = s.ID) 
WHEN MATCHED THEN 
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN 
INSERT (Fascia) 
VALUES (s.Fascia); 

ここでの問題は、このクエリが機能せず、データや更新を挿入しないことです。また、クエリがコンパイルされると、私は私が行うことができます任意のコンパイル・エラーも

その後、私はJavaは、私が想定していますので、データベースを照会するステートメントを準備使用するため、このクエリが動作している私が欲しい理由を得ることはありません

Javaでsetメソッドを使用して値を渡すことができるようにします。

私の質問に間違いがある場合は教えてください。

+0

"ここでの問題は、このクエリは動作しませんです"。私がクリスタルボールを取ってきて何が間違っているかを見極める。 "エラーを出す質問"さて、エラーは何ですか?なぜ、私たちの助けが必要な場合は、私たちを暗闇の中に残すのですか? – HoneyBadger

+0

@HoneyBadger私はあなたを暗闇の中におかずません...クエリは更新や挿入はしませんが、エラーなしで実行されます。更新された質問。 – user3384231

答えて

0

ソースとしてターゲット表から選択しています。

mergeの前にFROM Test_tableを削除するか、Test_tableに少なくとも1行は必要です。

rextesterデモ:http://rextester.com/XROJD28508

MERGE INTO Test_table t 
USING (SELECT 461232 ID,'Test1-data' Fascia --FROM Test_table 
    ) s 
ON (t.ID = s.ID) 
WHEN MATCHED THEN 
UPDATE SET t.Fascia = s.Fascia 
WHEN NOT MATCHED THEN 
INSERT (Fascia) 
VALUES (s.Fascia); 
+0

ありがとう。 From Test_tableを削除しました。 – user3384231

+0

@ user3384231お寄せいただきありがとうございます! – SqlZim

関連する問題