Wir haben eine Skalarfunktion, die eine DateTime zurückgibt. Es führt einige schnelle Tabellenauswahl aus, um seinen Rückgabewert zu erhalten. Diese Funktion wird bereits in der gesamten Datenbank verwendet - in Standard-Constraints, gespeicherten Procs usw. Ich möchte die Implementierung der Funktion ändern (um die Tabellentreffer zu entfernen und effizienter zu machen), aber das kann ich scheinbar nicht tun Es wird von anderen Objekten in der Datenbank referenziert.
Muss ich tatsächlich jedes Objekt in der Datenbank aktualisieren oder löschen, das darauf verweist, die Funktion aktualisieren und dann alle diese Objekte aktualisieren oder neu erstellen, um den Verweis auf die Funktion wiederherzustellen?
Auf die Funktion wird von einer Handvoll Sichten, Triggern, einigen Funktionen und einer großen Anzahl von Standardbedingungen und gespeicherten Prozeduren verwiesen.
Danke für jede Einsicht, die Sie geben können.
Der Fehler, den ich bekomme, wenn ich versuche, die Funktion zu ändern oder zu löschen, ist:
Kann nicht [ALTER | DROP FUNCTION] 'dbo.GetClientCurrentTime', weil es vom Objekt 'DF_tbl_PatientOrder_Note_RecordCreated' referenziert wird.
Es kommt darauf an. Wenn die Objekte, die auf die Funktion verweisen, die Option WITH SCHEMABINDING
haben, werden Sie explizit daran gehindert, sich mit der Funktion zu messen. Andernfalls besteht die einzige Einschränkung in der Einschränkung der normalen DDL-Zugriffssperrung, dh die Ausführungspläne, die die Funktion verwenden, werden die Funktion für die Schemastabilitätssperren sperren. Dadurch werden Ihre ALTER FUNCTION-Anweisungen blockiert, da sie eine Schemamodifizierungssperre erfordern. Aber das würde sich lösen, wenn die Pläne die Ausführung beenden.
Tags und Links sql-server user-defined-functions tsql