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