我一直在打我的头这,我敢肯定,我只是失去了一些东西很明显,但...

我有一个客户的数据库中的表,这是基本上是:

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项,并没有改变的模式不是一个选项(其他外部因素参与)。

但是,为了在任何远程类似情报向用户显示它,我们必须UNPIVOT它(通过查看)是这样的:

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列,但列名的项目,并注意列动,我可以“T只设置了所有的列的,因为每个记录将仅具有一个项目/音符对数据

想法?

有帮助吗?

解决方案

您将无法依靠数据绑定,将更改发送回数据库在原来的回转工作台。相反,你需要捕捉每个更新为一个单一的“工作单位”。例如,产品ID = 92,值= “汤姆”。也许以前92项的值为“乔”。这里的工作单元是改变值项目92

当用户通过用户界面进行了更改,你可以批量的,各UOW并留住他们,直到他们准备点击保存。当用户要求保存,每个捕获UOW被“打”针对数据库。搜索周围的“命令”模式和/或一些杰里米米勒的文章。

另一个想法是,你说你无法改变的模式,但也许你真的可以。考虑创建一个真正的表,它是在逆转置格式。然后与使用PIVOT命令的视图替换当前表。实际上,你的数据存储在一个更好的设计,但对于现有的应用程序,您支点回来。这可以工作,除非你需要做的更新,同时它在转动的设计。

最后一种办法就是你可以简单地保持两个物理表,然后写一些复杂的合并操作给他们定期同步。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top