我一直在打我的頭這,我敢肯定,我只是失去了一些東西很明顯,但...更新一個UNPIVOTted SQL表
我有一個客戶的數據庫中的表,這基本上:
Item_Set_Key int
Item_1 bit
Notes_1 nvarchar(80)
Item_2 bit
Notes_2 nvarchar(80)
Item_3 bit
Notes_3 nvarchar(80)
...
有一個在每個記錄99項,並沒有改變架構不是一個選項(其他外部因素有關)。
然而,爲了在任何遠程類似的情報向用戶顯示它,我們必須逆轉置它(通過View)是這樣的:
SELECT i.Item_Set_Key, i.Item_Number, i.Selected, i.Item, i2.Notes, i2.Note
FROM (
SELECT Item_Set_Key, SUBSTRING (Item, 6, 2) AS Item_Number, Selected, Item
FROM Item_Set
UNPIVOT (Selected FOR Item IN
(Item_1, Item_2, Item_3, Item_4, Item_5, ...)
) as u
) AS i
LEFT JOIN (
SELECT Item_Set_Key, SUBSTRING (Note, 7, 2) AS Item_Number, Notes
FROM Item_Set
UNPIVOT (Notes FOR Note IN
(Notes_1, Notes_2, Notes_3, Notes_4, Notes_5, ...)
) as n
) AS i2 ON i2.Item_Set_Key = i.Item_Set_Key
AND i2.Item_Number = i.Item_Number
我做的,該標準結合網格。然而,我在茫然,如何構建它的UpdateCommand的東西,因爲文字必須明確命名的SET列,但列名的項目,並注意列動,我可以只是設置所有列,因爲每個記錄只有一個項目/音符對的數據。
想法?
是啊,這就是我試圖避免。我希望有一種方法可以編寫INSERT/UPDATE/DELETE命令,這些命令不是一組大量的(有效的)SQL IF語句(並且這將非常龐大,需要處理幾百列)。模式問題源於這樣一個事實,即遺留系統也在積極更新大量數據格式的數據,所以是一個巨大的表格合併的東西將是醜陋的。我要這樣做的方式是一組sprocs,它包裝了設置的功能並對其進行了翻譯,以便我可以在INSERT/UPDATE/DELETE語句中使用對它們的調用。 – Thought 2009-09-09 22:50:25