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

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

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

Неверное имя столбца '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

Почему?

Ответы [ 2 ]

21 голосов
/ 11 октября 2010

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

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

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

0 голосов
/ 11 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...