Wir führen eine Datenbankmigration zu SQL Server durch, und zur Unterstützung einer Legacy-App haben wir in der SQL Server-Tabelle Ansichten definiert, die Daten wie die Legacy-App erwarten.Verwenden von Standardwerten in einem INSTEAD OF INSERT-Trigger
Wir haben jedoch Probleme mit INSTEAD OF INSERT-Triggern, die für diese Sichten definiert wurden, wenn die Felder Standardwerte haben können.
Ich werde versuchen, ein Beispiel zu geben.
Eine Tabelle in der Datenbank hat 3 Felder, a, b und c. c ist brandneu, die Alt-App weiß nichts darüber, also haben wir auch eine Ansicht mit 2 Feldern, a und b.
Wenn die Legacy-Anwendung versucht, einen Wert in seiner Ansicht einzufügen, verwenden wir ein STATT INSERT-Trigger den Wert zu suchen, der in Feld c, so etwas wie das gehen sollte: von
INSERT INTO realTable(a, b, c) SELECT Inserted.a, Inserted.b, Calculated.C FROM...
(Die Details die Suche ist nicht relevant.)
Dieser Trigger funktioniert gut, es sei denn Feld b hat einen Standardwert. Dies liegt daran, wenn die Abfrage
INSERT INTO legacyView(a) VALUES (123)
ausgeführt wird, dann in dem Trigger, Inserted.b NULL ist, nicht Standardwert b. Jetzt habe ich ein Problem, weil ich nicht dem Unterschied die obige Abfrage sagen kann, was den Standardwert in b setzen würde, und dies:
INSERT INTO legacyView(a,b) VALUES (123, NULL)
Auch wenn b war nicht NULLABLE, ich weiß nicht, Wie schreibe ich die INSERT-Abfrage in den Trigger, so dass, wenn ein Wert für b zur Verfügung gestellt wurde, wird es im Trigger verwendet, aber wenn nicht, wird stattdessen der Standardwert verwendet.
EDIT: hinzugefügt, dass ich lieber nicht die Standardwerte im Trigger duplizieren würde. Die Standardwerte sind bereits im Datenbankschema, ich würde hoffen, dass ich sie einfach direkt verwenden könnte.
Zu wissen, dass alle Felder mit Standardwerten nicht nullbar sind, ist RIESIG! Ich hätte eine Lösung für dich finden können, wenn ich diese Information gewusst hätte. – ErikE
Sorry Emtucifor, ich wusste zu der Zeit nicht, dass ich die Frage gestellt habe, dass wir keine Standardwerte auf Nullable-Feldern hatten. Was wäre deine Lösung gewesen? Wenn es gut ist, kann ich es immer noch aufwerten und vielleicht die akzeptierte Antwort ändern! –