0

テーブル内の行を使用したいので、MERGE構文を試して使用したいInsertと思います。私の問題は、(挿入/更新するための)データがに存在することです。挿入/更新部分の正しい構文を書く方法がわかりません。Updatevariable table

これが私の疑似コードです:-

-- Here's the Variable Table ... and not it has not PK.
DECLARE @PersonId INTEGER

DECLARE @variableTable TABLE (
    @SomeScore DECIMAL(10,7),
    @SomeAverage DECIMAL(10,7),
    @SomeCount INTEGER)

-- Insert or Update
MERGE INTO SomeTable
WHERE PersonId = @PersonId
WHEN MATCHED THEN
    UPDATE
    SET PersonScore = ??????????
        PersonAverage = ???????
        PersonCount = ????????
WHEN NOT MATCHED THEN
    INSERT(PersonId, PersonScore, PersonAverage, PersonCount)
    VALUES(@PersonId, ????, ?????, ????)

..そして、1行だけを正しく更新する方法がわかりませんUPDATE(つまり、...WHERE句が必要ですか?)

最後に、この投稿はこのSOの質問に基づいています。

4

1 に答える 1

1

はい、可能です。しかし、あなたの構文はオフでした。以下はうまくいくようです。私は@PersonIdテーブル変数の外に別のスカラー変数として保持しました。それがあなたの質問にそれを持っている方法です。そして、SomeTableの主キーはPersonId

DECLARE @PersonId INT

DECLARE @variableTable TABLE (
    SomeScore DECIMAL(10,7),
    SomeAverage DECIMAL(10,7),
    SomeCount INTEGER
    )

-- Insert or Update
MERGE SomeTable AS T
USING @variableTable AS S
ON (T.PersonId = @PersonId) 

WHEN MATCHED THEN
    UPDATE
    SET T.PersonScore = SomeScore,
        T.PersonAverage = SomeAverage,
        T.PersonCount = SomeCount
WHEN NOT MATCHED  BY TARGET THEN
    INSERT(PersonId, PersonScore, PersonAverage, PersonCount)
    VALUES(@PersonId, SomeScore, SomeAverage, SomeCount);
于 2010-06-25T07:20:12.777 に答える