Beim Erstellen einer gespeicherten Prozedur in SQL Server dürfen Sie auf Tabellen verweisen, die nicht vorhanden sind. Wenn die Tabelle jedoch vorhanden ist, muss jede Spalte, auf die Sie in der Prozedur verweisen, in dieser Tabelle vorhanden sein ( Auflösung des verzögerten Namens ).
Ist es möglich, SQL Server anzuweisen, die Namensauflösung aller Tabellen, auf die in einer Prozedur verwiesen wird, zu verschieben, unabhängig davon, ob sie vorhanden sind oder nicht? Ich möchte die allgemeine Syntaxprüfung beibehalten. Selbst wenn dies möglich wäre, ist das Hacken der Definition der gespeicherten Prozedur in eine Systemtabelle keine Option.
Ich gehe davon aus, dass meine Aufforderung dazu etwas seltsam erscheint. Hier einige Hintergrundinformationen: Ich generiere automatisch Tabellendefinitionen und gespeicherte Prozeduren aus einer in C # geschriebenen Anwendung, und es ist sehr schwierig für mich, den Code zu ändern, um die Änderungen nach SQL zu ordnen Sie. Mein Code "garantiert", dass das Schema innerhalb einer Transaktion konsistent ist, aber derzeit kann ich nicht garantieren, dass die Tabellenspalten definiert sind, bevor ich die gespeicherte Prozedur definiere, die auf sie verweist.
Unten finden Sie ein kanonisches Beispiel für das von C # erstellte SQL, das das Problem "veranschaulicht", das ich zu lösen versuche.
--Say this table already exists.
CREATE TABLE myTable
(
a NVARCHAR(MAX)
)
GO
--My C# code creates something like this
BEGIN TRAN
GO
--the stored procedure gets generated first.
CREATE PROCEDURE mySproc
AS
BEGIN
SELECT a,b FROM myTable
END
--then the table update
ALTER TABLE myTable
ADD b nvarchar(MAX)
COMMIT TRAN
Es ist mir möglich, dies im C # -Code zu beheben, aber ich hoffe auf eine einfache "magische" Optimierung, die ich in SQL durchführen kann. Das spart mir viel Zeit.