Pregunta

He estado golpeando mi cabeza contra esto, y estoy seguro de que simplemente estoy perdiendo algo obvio, pero ...

Tengo una tabla base de datos de un cliente, que es básicamente:

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)
...

Hay 99 artículos en cada registro, y sin cambiar el esquema no es una opción (otras consideraciones externas implicadas).

Sin embargo, con el fin de mostrarlo en algo que se parezca remotamente inteligencia para el usuario, tenemos que UNPIVOT que (a través de una vista) como esto:

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

hago el enlace norma de que a la red. Sin embargo, estoy en algo así como una pérdida en cuanto a cómo construir el UpdateCommand para ello, ya que el texto tendría que indicar el nombre de la columna en el conjunto, pero los nombres de columna son dinámicos en las columnas artículo y fichas, y puedo 't acaba de establecer todas las columnas, ya que cada registro sólo tendría datos para un elemento par / nota.

Las ideas?

¿Fue útil?

Solución

Usted no va a ser capaz de confiar en los datos vinculante para enviar los cambios a la base de datos en la tabla pivota originales. En lugar usted necesita para capturar cada actualización como una sola "unidad de trabajo". Por ejemplo, el punto de id = 92, el valor = "Tom". Quizás previamente valor del artículo 92 de la era "Joe". Su unidad de trabajo que aquí es cambiar el valor para el artículo 92.

A medida que el usuario realiza cambios a través de la interfaz de usuario se puede tratar por cada UOW juntos y aferrarse a ellos hasta que estén listos hacer clic en Guardar. Cuando el usuario solicita los puños cada UOW capturada se "juega" en contra de la base de datos. Buscar alrededor para el patrón "comando" y / o algunos de los artículos de Jeremy Miller.

Otra idea es que ha dicho que no se puede cambiar el esquema, pero tal vez usted puede realmente. Considerar la creación de una mesa real que está en el formato no girados. A continuación, reemplace la tabla actual, con una vista que utiliza el comando de pivote. En efecto se almacenan los datos en un mejor diseño, pero para la aplicación existente que el pívot de nuevo. Esto podría funcionar a menos que usted necesita hacer cambios mientras está en el diseño pivotante.

última opción es simplemente podría mantener dos tablas físicas y luego escribir alguna operación de combinación compleja para sincronizar periódicamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top