Estamos realizando una migración de base de datos a SQL Server, y para admitir una aplicación heredada, hemos definido vistas en la tabla de SQL Server que presentan datos como espera la aplicación heredada.Uso de valores predeterminados en un desencadenador INSTEAD OF INSERT
Sin embargo, ahora estamos teniendo problemas con los desencadenadores INSTEAD OF INSERT definidos en esas vistas, cuando los campos pueden tener valores predeterminados.
Trataré de dar un ejemplo.
Una tabla en la base de datos tiene 3 campos, a, b y c. c es nuevo, la aplicación heredada no lo conoce, por lo que también tenemos una vista con 2 campos, a y b.
Cuando la aplicación legado intenta insertar un valor en su opinión, se utiliza un desencadenador INSTEAD OF INSERT para buscar el valor que debe ir en el campo c, algo como esto:
INSERT INTO realTable(a, b, c) SELECT Inserted.a, Inserted.b, Calculated.C FROM...
(Los detalles de la búsqueda no es relevante.)
Este disparador funciona bien, a menos que el campo b tenga un valor predeterminado. Este es el valor por defecto porque si se ejecuta la consulta
INSERT INTO legacyView(a) VALUES (123)
, a continuación, en el gatillo, Inserted.b es NULL, no de b. Ahora tengo un problema, porque no puedo decir la diferencia de la consulta anterior, lo que pondría el valor por defecto en b, y esto:
INSERT INTO legacyView(a,b) VALUES (123, NULL)
Incluso si B era no anulable, no sé cómo escribir la consulta INSERTAR en el desencadenante de modo que si se proporcionó un valor para b, se usa en el desencadenador, pero si no se utiliza el valor predeterminado se utiliza en su lugar.
EDITAR: agregó que preferiría no duplicar los valores predeterminados en el desencadenador. Los valores predeterminados ya están en el esquema de la base de datos, espero que pueda usarlos directamente.
¡Saber que todos sus campos con valores predeterminados no aceptan nulos es enorme! Podría haber tenido una solución para ti si hubiera sabido esta información. – ErikE
Lo siento Emtucifor, no sabía en ese momento que publiqué la pregunta de que no teníamos ningún valor predeterminado en los campos con nulos. ¿Cuál hubiera sido tu solución? Si es bueno, aún puedo votarlo y quizás cambiar la respuesta aceptada. –