2010-10-11 1 views
15

Il existe un script de transfert, qui crée une nouvelle colonne DOCUMENT_DEFINITION_ID l'applique aux valeurs de MESSAGE_TYPE_ID + 5, puis supprime la colonne MESSAGE_TYPE_ID.Erreur SQL indiquant un nom de colonne invalide lorsque j'ai vérifié s'il existe. Pourquoi?

tout d'abord le temps courir ok, mais quand je lance la deuxième fois de script que je reçois cette erreur:

Invalid column name 'MESSAGE_TYPE_ID'.

Il n'a pas de sens puisque, je vérification si cette colonne existe.

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'MESSAGE_TYPE_ID' AND TABLE_NAME = 'DOCUMENT_QUEUE') 
BEGIN 
    UPDATE DOCUMENT_QUEUE SET DOCUMENT_DEFINITION_ID = MESSAGE_TYPE_ID + 5 --Error here.. but condition is not met 

Pourquoi?

+0

Cela apporte un peu de lumière, je pense: http://msdn.microsoft.com/en-us/library/ms190686.aspx –

Répondre

19

Essayez cette

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'MESSAGE_TYPE_ID' AND TABLE_NAME = 'DOCUMENT_QUEUE') 
BEGIN 
    EXEC('UPDATE DOCUMENT_QUEUE SET DOCUMENT_DEFINITION_ID = MESSAGE_TYPE_ID + 5 ') 
END 

Il contourne la résolution du nom retardé en enroulant la mise à jour dans l'état dynamique.

+1

Ah .. SQL dynamique! C'est certainement la solution la plus rapide à faire. Merci. –

1

La résolution retardée des noms ne se produit que sur les tables qui n'existent pas. Vous devrez supprimer et créer la table entière.

+0

Êtes-vous sûr de cela? Y at-il une autre solution de contournement? –