Не первый раз с таким сталкиваемся и будем сталкиваться вновь, пока не отменят SQL :) Дело в том, что использование * во вьюшке зачастую приводит к проблемам, причем довольно забавным. Например, если изменить порядок полей таблицы на которой основана вьюшка, то при запросе
select * from myviewвы рискуете в поле A получить значения из поля B и наоборот :) То же происходит при добавлении новых полей - вы их просто не увидите. А если удалите поле - тут уж вьюшка просто сломается. Это связано с тем, что метаданные вьюшки (наименования столбцов) не обновляются сами по-себе, а столбцы в запрос берутся не по имени, а по-порядку
Решение1:
Самым верным решением является отказ от использования *
Решение2:
Регулярно использовать sp_refreshview, но это костыли
2 комм.:
Разве метаданные не обновляются после пересохранения, например, вьюшки? или даже через какое-то время (час, день), или после рестарта сервиса и т.п.? Ведь почти все описанные проблемы остаются и в том случае, если мы будем перечислять во вьюшке конкретные поля!! При добавлении новых полей в таблицу вьюшка их не увидит, а при удалении старых - сломается. Пожалуй только изменение порядка полей не повлияет. А пересохранить вьюшку намного проще, чем добавлять или удалять поля из запроса (главное не забыть!). В чем профит? :)
Профит в том, что вьюшка будет работать всегда ожидаемо. А не бог весть как :)
Отправить комментарий