Microsoft SQL Server semble vérifier la validité du nom de colonne, mais pas la validité du nom de la table lors de la définition des procédures stockées. S'il détecte qu'un nom de table référencé existe actuellement, il valide les noms de colonne dans une instruction par rapport aux colonnes de cette table. Ainsi, par exemple, cela se déroulera sur OK:Pourquoi Microsoft SQL Server vérifie-t-il les colonnes mais pas les tables dans les procs stockés?
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
Col1, Col2, Col3
FROM
NonExistentTable
END
GO
... tout comme ceci:
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
ExistentCol1, ExistentCol2, ExistentCol3
FROM
ExistentTable
END
GO
... mais cela ne fonctionne pas, avec 'nom de colonne non valide':
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
NonExistentCol1, NonExistentCol2, NonExistentCol3
FROM
ExistentTable
END
GO
Pourquoi SQL Server vérifie-t-il l'existence des colonnes, mais pas des tables? Sûrement c'est inconsistant; il devrait faire les deux, ou aucun. Il est utile de pouvoir définir des SP qui peuvent se référer à des tables ET/OU des colonnes qui n'existent pas encore dans le schéma. Il est donc possible de désactiver la vérification de l'existence des colonnes SQL Server dans les tables existantes ?
Qui est; la non-vérification des tables, ou la vérification des colonnes? – Jez
La non vérification des tables. Si toutes les tables utilisées dans une instruction existent, elles ne sont pas différées. –
Merci pour l'explication; Pourquoi avez-vous besoin de DROP TABLE #Dummy? Les tables temporaires ne sont-elles pas automatiquement supprimées une fois le proc stocké terminé? – Jez