2017-10-06 11 views
0

でのエラーは、編集:SQL Serverの - MERGE

:私はマイクロソフトのSQLServer 2014年にMERGEを使用しようとしているが、私は、ターゲット表の構文エラーを取得しています

をテーブル構造を入れて、実際のMERGE

MERGE VALORATION_DETAIL_INPUTS_LIMIT AS Target 
USING (VALUES (922, 4098)) AS Source(idValoration, idDetValInput) 
ON (Source.idValoration = Target.idValoration AND Source.idDetValInput = Target.idDetValInput) 
WHEN MATCHED THEN 
    UPDATE SET idSubject = 1633, idGood = 1114, idWarranty = 7519, idSubWarranty = 7520, units = 1.000000, 
       unitPrice = 250.000000, limit = 250.000000, percTax = 21.000000, tax = 52.500000, subtotal = 197.500000, 
       total = 250.000000 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (idDetValInput, idValoration, idSubject, idGood, idWarranty, idSubWarranty, units, 
      unitPrice, limit, percTax, tax, subtotal, total) 
    VALUES(4093, 922, 1633, 1114, 7519, 7520, 1.000000, 250.000000, 250.000000, 21.000000, 52.500000, 197.500000, 250.000000) 
OUTPUT $ACTION 

エラーがある:

Msg 156, Level 15, State 1, Line ... Incorrect syntax near the word 'AS'.

表構造:

CREATE TABLE VALORATION_DETAIL_INPUTS_LIMIT 
(
    idDetValInput bigint NOT NULL, 
    idValoration bigint NOT NULL, 
    idSubject bigint NOT NULL, 
    idGood int NULL, 
    idWarranty int NULL, 
    idSubWarranty int NULL, 
    units real NULL, 
    unitPrice money NULL, 
    limit money NULL, 
    percTax real NULL, 
    tax money NULL, 
    subtotal money NULL, 
    total money NULL 
) 
+0

クエリに何の "ライン14" を持っていません。 –

+0

まあ、私は以前に "USE"と "GO"を持っています。私はそれを置く必要はないと思った。 –

+0

今、問題は異なります。 "INSERT文には、VALUES句で指定した値よりも多くの列があります。VALUES句の値の数は、INSERT文で指定された列の数と一致する必要があります。ですから、私はINSERTステートメントのVALUES部分に2つの値を最後に追加しても問題ありません。要するに、INSERT文で指定された13個のカラムは、INSERT文のVALUES部分に11個以上のVALUESがあります。そこに提供される必要があるさらに2つの値があります。 – Amit

答えて

1

ソースとして(id、value)を追加する必要があります。

.... Target 
USING (SELECT 922 AS id, 4098 AS value) AS Source (id,value) 
ON ........ 
2
    代わりにSELECTを介してソーステーブルの作成
  1. 使用値句、またはあなたはまた、ユーザーの@ m.benslimaneによって提案されたオプションを使用することができます。このような

  2. また、ターゲットを更新するため、INSERT文でTarget.id、Target.valueを使用する必要はありません。

  3. 静的な値で更新しているので、これはおそらくPOCコードです。これを実際のクエリで処理してください。

    MERGE VALORATION_DETAIL_INPUTS_LIMIT AS Target 
    
    USING (VALUES (922, 4098)) AS Source(idValoration, idDetValInput) 
    
    ON (Source.idValoration = Target.idValoration 
    AND Source.idDetValInput = Target.idDetValInput) 
    WHEN MATCHED THEN 
    
    UPDATE SET idSubject = 1633, idGood = 1114, idWarranty = 7519, 
        idSubWarranty = 7520, units = 1.000000, 
        unitPrice = 250.000000, limit = 250.000000, 
        percTax = 21.000000, tax = 52.500000, subtotal = 197.500000, 
        total = 250.000000 
    WHEN NOT MATCHED BY TARGET THEN 
    
    INSERT (idDetValInput, idValoration, idSubject, idGood, 
         idWarranty, idSubWarranty, units,unitPrice, 
         limit, percTax, tax, subtotal, total) 
    
    VALUES(1633, 1114, 7519, 7520, 1.000000, 
         250.000000, 250.000000, 21.000000, 
         52.500000, 197.500000, 250.000000, 
         --DUMMY VALUES I ADDED BELOW 
         20.00, 20.00) 
    
    OUTPUT $ACTION; 
    
+0

私はこれらの問題を修正しました。ヒントはありがたいですが、私はまだ同じエラーが出ます。SQL ServerはMERGEが好きではないようです:( –

+0

@AndrésMarotta私はテーブルを作って走った – Amit

+0

また、現在使用しているSQL Serverのバージョンは? – Amit

関連する問題