Pourquoi SQL Server se plaint d'une colonne non existante, si le SQL réel n'est pas exécuté?

J'ai le SQL suivant:

IF EXISTS (SELECT 1 FROM sys.columns WHERE name='RequireNamespaceClaim' AND object_id = OBJECT_ID('DefaultBaseUrl')) BEGIN UPDATE DefaultBaseUrl SET AuthenticationTypeId = at.AuthenticationTypeId FROM DefaultBaseUrl dbu JOIN ( SELECT AuthenticationTypeId, CASE CodeName WHEN 'NATIVE' THEN 0 ELSE 1 END RequireNamespaceClaim FROM AuthenticationType ) at ON dbu.RequireNamespaceClaim = at.RequireNamespaceClaim END 

L'exécuter imprime:

 Msg 207, Level 16, State 1, Line 8 Invalid column name 'RequireNamespaceClaim'. 

Cependant, courir

 SELECT 1 FROM sys.columns WHERE name='RequireNamespaceClaim' AND object_id = OBJECT_ID('DefaultBaseUrl') 

révèle qu'aucune telle colonne n'existe en effet.

Ainsi, l'instruction IF EXISTS est FALSE , par conséquent le corps de l'instruction if ne s'exécute pas. Cependant, l'erreur est toujours imprimée.

Que se passe-t-il?

Comment puis-je le réparer?

SQL Server comstack la requête entière et la vérifie pour la validité.

À ce moment-là, la colonne n'existe pas.

Il existe une command pour exécuter un SQL à partir d'une string qui n'est pas compilée.

Jetez un oeil à (je pense que c'est la bonne): http://technet.microsoft.com/en-us/library/ms175170(v=sql.105).aspx