質問

があるので、更新を実行に軸テーブルには、SQL Server2008年の変化の伝播のソーステーブルとはありませんの凝集?

役に立ちましたか?

解決 2

ピボット列が一意の識別子を形成する場合は、

これは実際に動作します。それでは、バギーの例を見てみましょう。ここで、元の表があります:

TaskID    Date    Hours

と、私たちはこのようになりますテーブルにそれを旋回するようにしたい:

TaskID    11/15/1980    11/16/1980    11/17/1980 ... etc.

ピボットを作成するためには、あなたがこのような何かをするでしょう。

DECLARE @FieldList NVARCHAR(MAX)

SELECT
    @FieldList =
    CASE WHEN @FieldList <> '' THEN 
        @FieldList + ', [' + [Date] + ']' 
    ELSE 
        '[' + [Date] + ']' 
    END
FROM
    Tasks



DECLARE @PivotSQL NVARCHAR(MAX)
SET @PivotSQL = 
    '
        SELECT 
            TaskID
            , ' + @FieldList + '
        INTO
            ##Pivoted
        FROM 
            (
                SELECT * FROM Tasks
            ) AS T
        PIVOT
            (
                MAX(Hours) FOR T.[Date] IN (' + @FieldList + ') 
            ) AS PVT
    '

EXEC(@PivotSQL)

それではあなたは##Pivotedであなたに旋回テーブルを持っています。今、あなたは時間のフィールドのいずれかに更新を実行します:

UPDATE
    ##Pivoted
SET
    [11/16/1980 00:00:00] = 10
WHERE
    TaskID = 1234

##Pivoted 1980年11月16日に行われた作業時間の更新バージョンを持っており、我々はその元のテーブルに保存しておきたいので、私たちはUNPIVOTを使用します:

DECLARE @UnPivotSQL NVarChar(MAX)
SET @UnPivotSQL = 
    '
        SELECT
              TaskID
            , [Date]
            , [Hours]
        INTO 
            ##UnPivoted
        FROM
            ##Pivoted
        UNPIVOT
        (
            Value FOR [Date] IN (' + @FieldList + ')
        ) AS UP

    '

EXEC(@UnPivotSQL)

UPDATE
    Tasks
SET
    [Hours] = UP.[Hours]
FROM
    Tasks T
INNER JOIN
    ##UnPivoted UP
ON
    T.TaskID = UP.TaskID

私は曜日によって凝集を削除するにはバギーの例を変更していることに気づくでしょう。後戻りし、凝集の任意の並べ替えを行う場合は更新がないためです。私はSUNHoursフィールドを更新した場合、どのように私は私が更新していた日曜日の時間を知っていますか?何の凝集が存在しない場合にのみ動作します。私はこのことができます願っています!

他のヒント

PIVOTs"常に必要とする集計関数は、ピボットを提供しています。

このように常にある集計対象とします。

なので、できるまで更新可能.

できるサイズで INSTEAD OF TRIGGER できる事を示書に基づいて、このようにできるビューの更新可能.

こちらの

これはただの推測ですが、ビューにクエリを作成し、それを更新することができますか?

私はそれが可能であることを信じていませんが、あなたが解決しようとしている実際の問題についての詳細を投稿した場合、誰かがそれを処理する別のアプローチにあなたにいくつかのアドバイスを与えることができるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top