Ошибка SQL с указанием недопустимого имени столбца, если у меня есть проверка, если она существует. Зачем?

Существует этап script, который создает новый столбец. DOCUMENT_DEFINITION_ID запускает его со значениями MESSAGE_TYPE_ID + 5, а затем удаляет столбец MESSAGE_TYPE_ID.

В первый раз все работает нормально, но когда я запускаю script второй раз, я получаю эту ошибку:

Неверное имя столбца 'MESSAGE_TYPE_ID'.

Это не имеет смысла, поскольку у меня есть верификация, если этот столбец существует.

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

Почему?

Ответы

Ответ 1

Попробуйте это

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

Он обходит отложенное разрешение имен, завершая обновление в динамическом выражении.

Ответ 2

Отложенное разрешение имен происходит только в тех таблицах, которые не существуют. Вам нужно будет отбросить и создать всю таблицу.