2010-10-11 55 views
15

Hay una secuencia de comandos de transición, que crea una nueva columna DOCUMENT_DEFINITION_ID la divide en valores de MESSAGE_TYPE_ID + 5 y luego elimina la columna MESSAGE_TYPE_ID.Error de SQL que indica el nombre de columna no válido cuando tengo la verificación si existe. ¿Por qué?

La primera vez que todo funcione bien, pero cuando corro guión segunda vez que estoy recibiendo este error:

Invalid column name 'MESSAGE_TYPE_ID'.

No tiene sentido ya que, existe la verificación de si existe esa columna.

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 

¿Por qué?

+0

Esto aporta algo de luz, creo: http://msdn.microsoft.com/en-us/library/ms190686.aspx –

Respuesta

19

probar este

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 

Se pasa por el retraso en la resolución de nombres, envolviendo la actualización en la sentencia dinámica.

+1

Ah .. SQL dinámico! Esta es definitivamente la solución más rápida para hacer. Gracias. –

1

La resolución retrasada de los nombres solo ocurre en tablas que no existen. Deberá soltar y crear toda la tabla.

+0

¿Estás seguro de eso? ¿Hay alguna otra solución? –

Cuestiones relacionadas