Pregunta

Gran base de datos en mssql2005 con gran base de código dependiendo de la estructura de esta base de datos.

Tengo alrededor de 10 tablas similares, todas contienen el nombre del archivo o la ruta completa al archivo. La ruta completa siempre depende de la identificación del elemento, por lo que no tiene sentido almacenarla en la base de datos. Obtener datos útiles de estas tablas es algo así:

SELECT a.item_id
, a.filename
FROM (
    SELECT id_item AS item_id
    , path AS filename
    FROM xMedia

    UNION ALL

    -- media_path has a different collation
    SELECT item_id AS item_id
    , (media_path COLLATE SQL_Latin1_General_CP1_CI_AS) AS filename
    FROM yMedia

    UNION ALL

    -- fullPath contains more than just the filename
    SELECT itemId AS item_id
    , RIGHT(fullPath, CHARINDEX('/', REVERSE(fullPath))-1) AS filename
    FROM zMedia

    -- real database has over 10 of these tables
) a

Me gustaría crear una vista única de todas estas tablas para que el nuevo código que use este desastre de datos no necesite conocer todas las diferentes tablas de medios. También me gustaría usar esta vista para insertar y actualizar declaraciones. Obviamente, el código antiguo aún dependería de las tablas para estar actualizadas.

Después de leer la página msdn sobre creando vistas en mssql2005 no creo que una vista con SCHEMABINDING sea suficiente.

¿Cómo crearía una vista actualizable?

¿Es este el camino correcto a seguir?

¿Fue útil?

Solución

Puede modificar las vistas particionadas, siempre que cumplan ciertas condiciones.

Estas condiciones incluyen tener una columna de particionamiento como parte de la clave primaria en cada tabla, y tener un conjunto de restricciones de verificación no superpuestas para la columna de particionamiento.

Este no parece ser tu caso.

En su caso, puede hacer lo siguiente:

  • Recree sus tablas como vistas (con columnas calculadas) para que su soft heredado funcione, y consulte la tabla completa del nuevo soft
  • Use los activadores INSTEAD OF para actualizar las tablas.

Otros consejos

Desplácese hacia abajo en la página que ha vinculado y verá un párrafo sobre vistas actualizables. No puede actualizar una vista basada en sindicatos, entre otras limitaciones. La lógica detrás de esto es probablemente simple, ¿cómo debería decidir SQL Server sobre qué tabla / vista de origen debería recibir la actualización / inserción?

Si una vista se basa en varias tablas base, la instrucción UPDATE en la vista puede o no funcionar dependiendo de la instrucción UPDATE. Si la instrucción UPDATE afecta a varias tablas base, el servidor SQL arroja un error. Mientras que, si la ACTUALIZACIÓN afecta solo a una tabla base en la vista, la ACTUALIZACIÓN funcionará (no siempre correctamente). Las instrucciones de inserción y eliminación siempre fallarán.

INSTEAD OF Triggers, se utilizan para ACTUALIZAR, INSERTAR y ELIMINAR correctamente desde una vista que se basa en varias tablas base. Los siguientes enlaces tienen ejemplos junto con un video tutorial sobre el mismo.

EN LUGAR DE INSERTAR Disparador
EN LUGAR DE ACTUALIZACIÓN Disparador
INSTEAD OF DELETE Trigger

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