2013-05-17 4 views
1

je le test logique suivant dans mon script de mise à jour de la base de données T-SQL:validation dans instruction logique

IF ((COL_LENGTH('dbo.Trackers','DeviceId') IS NOT NULL) AND (COL_LENGTH('dbo.Devices','UserId') IS NOT NULL)) 
    UPDATE [dbo].[Devices] 
    SET [UserId] = (SELECT TOP 1 t.UserId FROM Trackers t WHERE t.DeviceId = [dbo].[Devices].DeviceId); 
GO 

... qui me donne cette erreur:

Invalid column name 'DeviceId'.

OK, la colonne Trackers .DeviceId n'existe plus vraiment, mais la première partie de ma déclaration est censée bloquer cette validation, ou ai-je tort?

Merci d'avance!

Répondre

2

Je pense que c'est parce que la requête est compilée et pendant ce processus, le serveur vérifie la syntaxe. Il vous envoie cette erreur car la colonne n'existe pas, elle ne peut pas être mappée pendant ce processus.

+0

Je pense que vous avez raison. Peut-être devrais-je lancer un 'sp_executesql' dans mon IF. – Cesar

Questions connexes