J'écrivais un extrait SQL (apparemment) direct qui supprime une colonne après s'être assuré que la colonne existe.
Le problème: si la colonne n'existe pas, le code à l'intérieur la clause IF se plaint de ne pas trouver la colonne! Eh bien, doh, c'est pourquoi c'est dans la clause IF!
Donc ma question est, pourquoi un morceau de code qui ne devrait pas être exécuté donner des erreurs?Pourquoi un bloc T-SQL donne-t-il une erreur même s'il ne devrait même pas être exécuté?
est ici l'extrait:
IF exists (select * from syscolumns
WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
ALTER TABLE [dbo].[Table_MD]
DROP COLUMN timeout
END
GO
... et voici l'erreur:
Error executing SQL script [...]. Invalid column name 'timeout'
J'utilise Microsoft SQL Server 2005 Express Edition.
Correct. Vous obtiendrez également cette erreur s'il existe des tables temporaires que le sproc utilise. – ConcernedOfTunbridgeWells
Pour clarifier, si une table temporaire existe alors les colonnes seront vérifiées lorsque vous compilez le sproc. Lorsque le sproc crée réellement la table (par exemple avec un select into), vous devrez peut-être supprimer la table avant de recompiler le sproc. – ConcernedOfTunbridgeWells
Ceci est une très bonne réponse :) –