Lors de la création d'une procédure stockée dans SQL Server, vous êtes autorisé à faire référence à des tables qui n'existent pas. Mais, si la table existe, alors toute colonne à laquelle vous faites référence dans la procédure doit exister dans cette table ( résolution de nom différée ).
Est-il possible de demander à SQL Server de différer la résolution de noms de toutes les tables référencées dans une procédure, qu'elles existent ou non? Je veux garder la vérification de la syntaxe générale, donc même si c'était possible, pirater la définition de procédure stockée dans une table système n'est pas une option.
Je m'attends à ce que ma demande de faire cela puisse sembler un peu bizarre , alors voici un peu de contexte: je génère automatiquement des définitions de table et des procédures stockées à partir d'une application écrite en C # et il est très difficile pour moi de changer le code pour ordonner les changements selon les besoins de SQL leur. Mon code "garantit" que le schéma est cohérent dans une transaction, mais actuellement je ne peux pas garantir que les colonnes de la table sont définies avant de définir la procédure stockée qui les référence.
Ci-dessous est un exemple canonique du SQL créé par le C # qui "illustre" le problème que j'essaie de résoudre.
--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
Il est possible pour moi de résoudre ce problème dans le code C #, mais j'espère un simple ajustement "magique" que je peux tirer dans le SQL. Cela me fera gagner beaucoup de temps.