Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перегенерация вьюх при добавлении полей в таблицу  [new]
xtony
Member

Откуда:
Сообщений: 38
Столкнулся с такой вещью.
Есть таблица t. Есть вьюха v в которой есть селект некоторых полей из t.
После того, как я вставляю новые поля в t, у меня из этой вьюхи вытаскивается старый набор полей, но значения полей берутся из новых полей t.
Решается проблема простой перегенерацией вьюхи... но я не могу помнить все вьюхи, в которых я пользую эту таблицу и поэтому есть только вариант перегенерить все вьюхи после добавления полей в таблицу.
Это нормальный вариант или есть что-то более правильное?
3 сен 03, 14:50    [325032]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
sp_refreshview процедурка есть, ее можно вместо пересоздания использовать.
3 сен 03, 14:54    [325040]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
а найти такие вью (да и прочие объекты) поможет запрос типа

select object_name(id) from syscomments where text like '%table_name%'
3 сен 03, 15:00    [325058]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Вьюха с использованием "*" сделата?
3 сен 03, 15:36    [325152]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
xtony
Member

Откуда:
Сообщений: 38
Да, во вьюхе прописано (грубо говоря):

create view v
as
select t.f4, t.f6 from t

После этого я вставляю в t поле f3 например (перед t4)
и при select * from v получаю набор полей f4, f6, но в поле f4 значение сидит из поля f3.

Есть в принципе и много вьюх, сделанных с использованием "*", потому как трехзвенка и возвращаемые данные из таких вьюх используются при создании объектов. Поэтому "*" очень даже помогает ничего не меняя на сервере (ну кроме добавления полей в таблицы) получать наборы данных для тех же объектов. Но вот ботва со вьюхами, где возвращаются только некоторые поля повергла меня в некоторое огорчение.

Спасибо за ответы. Буду наверное устраивать sp_refreshview всем вьюхам в базе при инициализации среднего звена.
4 сен 03, 13:01    [326269]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Я вообще-то имел в виду вьюху вида:

create view v as select t.* from mytable t


И как понять выражение:

"После этого я вставляю в t поле f3 например (перед t4)"

t - тоже вьюха?
4 сен 03, 17:07    [326804]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
xtony
Member

Откуда:
Сообщений: 38
create table t (id int, quantity int, summ money)
go
insert into t values(1, 5, 10)
go
create view v as select quantity from mytable t
go

-- я не знаю, как сделать вставку поля в таблицу между полями в SQL, а Add тут не помогает, но таблица будет после вставки иметь вид:
-- table t (id int, price money, quantity int, summ money)
-- то есть произошла вставка поля price money

update t set price = 7
go

select * from v
go

Возвращаемая строка будет иметь вид:
quantity
7

Именно 7, а не 5 ! Хотя название поля будет старым.

Вьюхи вида
create view v as select t.* from mytable t
тоже у меня присутствуют, но пока я на них не смотрел - будет ли этот же глюк на них проявляться или нет.
5 сен 03, 11:30    [327485]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
После этого я вставляю в t поле f3 например (перед t4)

А в чем великая необходимость добавления поля f3 именно перед t4 ???
5 сен 03, 12:13    [327590]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
А если вьюху сделать с опцией VIEW_METADATA ошибка останется?
5 сен 03, 12:19    [327604]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
xtony
Member

Откуда:
Сообщений: 38
2 Glory
>> А в чем великая необходимость добавления поля f3 именно перед t4 ???

Да особой то необходимости нет. Разве только что красивее и понятней смотрится, когда поля в определенном порядке в таблице лежат.
Но достаточно часто я поля вставляю в Энтерпрайз-менеджере и другие коллеги по проекту занимаются тем-же. Поэтому глюка эта иногда всплывает. А хотелось бы, чтобы ее не было, не насаждая какие-либо дополнительные соглашения по написанию кода.

2 злой шаман
VIEW_METADATA - ок, попробую
8 сен 03, 16:09    [330145]     Ответить | Цитировать Сообщить модератору
 Re: Перегенерация вьюх при добавлении полей в таблицу  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Я боюсь, что поле добавляется через EM, который делает это путем переливания (пересоздания) таблицы. То есть вьюха "теряет" таблицу. Сбайндить вьюху и все :) То есть поля уже не добавишь без снятия вьюхи :)
8 сен 03, 20:44    [330618]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить