Función escalar utilizada en la columna calculada, ¿cuál es la forma más limpia de actualizar la función?


10

Quiero actualizar una función escalar en nuestra base de datos. Esta función se utiliza para varias columnas calculadas en una tabla de claves, por lo que obtengo un error de dependencia si intento actualizarla. Puedo eliminar explícitamente las columnas, actualizar la función y volver a agregar las columnas, pero, sin mucho fanny extra, eso cambiará el orden de las columnas y podría tener otras consecuencias no deseadas. Me preguntaba si había una forma más limpia de hacerlo.


44
Resolví esto solo parcialmente creando funciones ficticias que llamaban funciones reales. Por supuesto, si la firma cambia, entonces todo vuelve a comenzar.

3
Desafortunadamente, no creo que haya ninguna forma "mágica" o "más limpia" de hacer esto. Si necesita modificar la función, deberá soltar las columnas, modificar la función y volver a agregar todas las columnas. No hay forma de evitar esto.
marc_s

@marc_s Bueno, vale la pena intentarlo, mucha gente inteligente por aquí :)
robertc

De acuerdo con los comentarios anteriores. Pensé que podría haber margen para que SYNONYMs ofrezca ayuda aquí (consulte un SYNONYM en la columna calculada), pero no puede ALTERAR un sinónimo una vez creado para "redirigirlo" a otro objeto.
AdaTheDev

1
Todavía no es tan doloroso como actualizar la definición de un UDT CLR (incluso cuando el cambio es solo un ajuste a un método y no afecta en absoluto la representación de almacenamiento)
Martin Smith

Respuestas:


2

Esto puede ser más trabajo, pero debería obtener (aproximadamente) lo que buscas:

1 - Cree una nueva tabla que tenga solo su PK de la tabla principal y la función actualizada.

2 - Suelta tu columna anterior

3 - Cambia el nombre de tu tabla anterior a algo como TableName_Base

4 - Cree un archivo VIEWque combine su tabla principal con su tabla de búsqueda, con los campos en el orden en que desea verlos. Asigne un nombre a la vista sea cual sea el nombre original de su tabla.

Potencialmente, esto creará algunos problemas INSERTSy, UPDATESdado que accederá a través de una vista. Para lidiar con eso, puede insertarlo directamente en la tabla, sin pasar por la vista.


Eso suena como más trabajo y el mismo nivel de riesgo que eliminar y volver a agregar las columnas.
robertc

1
@robertc Será menos perjudicial si este es un entorno de alta transacción, pero sí, todavía es bastante desordenado.
JNK
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.