Ошибка 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
Отложенное разрешение имен происходит только в тех таблицах, которые не существуют. Вам нужно будет отбросить и создать всю таблицу.