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

Откуда: Харьков
Сообщений: 828
Есть формируемый динамически View (динамический Cross Tab)
Есть инлайн функция где он используется

ALTER FUNCTION [dbo].[Func]
(
	...
)
RETURNS TABLE
AS
RETURN

SELECT     
	t.ID, 
	/*тут список 50-ти полей*/	
	v.* 	
FROM         
	dbo.Table t
        INNER JOIN ... 
        /* тут inner join 5 таблиц и left join 6,
        в самом конце :*/
	LEFT JOIN dbo.View v ON v.Id = t.ID


Добавляем в представление View определение нового столбца (это происходит в триггере на справочнике, но это неважно, думаю). Важно то, что в каких то случаях, выборка вида

 SELECT * FROM dbo.Func WHERE ID = @p


не содержит добавленного столбца !

Т.е. как понимаю оптимизатор берет старый план, не отслеживая того что view поменялся?
Что можно сделать кроме того, что динамически формировать и саму Func, уходя т.о. от v.* ?

Microsoft SQL Server 2000 - 8.00.2055

Спасибо !
12 мар 12, 17:53    [12233999]     Ответить | Цитировать Сообщить модератору
 Re: динамически формируемое представление внутри функции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
sp_refreshview. Но вообще, нефиг звездочки во view писать.
12 мар 12, 17:55    [12234016]     Ответить | Цитировать Сообщить модератору
 Re: динамически формируемое представление внутри функции  [new]
vladK
Member

Откуда: Харьков
Сообщений: 828
Спасибо. Я всё понимаю про звёздочки, но в данном случае альтернатива это динамика самой функции, т.к. список полей во view постепенно добавляется.
12 мар 12, 18:03    [12234099]     Ответить | Цитировать Сообщить модератору
 Re: динамически формируемое представление внутри функции  [new]
vladK
Member

Откуда: Харьков
Сообщений: 828
sp_refreshview View не помогает
И даже если после него делать sp_recompile Func !
12 мар 12, 18:40    [12234381]     Ответить | Цитировать Сообщить модератору
 Re: динамически формируемое представление внутри функции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vladK
sp_refreshview View не помогает
И даже если после него делать sp_recompile Func !

Я подозреваю, что цепочка действий должна быть следующая:
  • alter table
  • sp_refreshview
  • alter function
  • 12 мар 12, 18:49    [12234439]     Ответить | Цитировать Сообщить модератору
     Re: динамически формируемое представление внутри функции  [new]
    vladK
    Member

    Откуда: Харьков
    Сообщений: 828
    эта цепочка срабатывает и без sp_refreshview. Не хотелось делать alter function в триггере на alter table. Но похоже без него никак.
    12 мар 12, 19:20    [12234632]     Ответить | Цитировать Сообщить модератору
     Re: динамически формируемое представление внутри функции  [new]
    Knyazev Alexey
    Member

    Откуда: Екб -> Мск
    Сообщений: 10233
    Блог
    vladK
    Не хотелось делать alter function в триггере на alter table. Но похоже без него никак.


    sp_refreshsqlmodule
    

    ?
    12 мар 12, 19:43    [12234748]     Ответить | Цитировать Сообщить модератору
     Re: динамически формируемое представление внутри функции  [new]
    vladK
    Member

    Откуда: Харьков
    Сообщений: 828
    Knyazev Alexey
    sp_refreshsqlmodule
    


    Может быть и да, но он появился в 2005
    12 мар 12, 20:01    [12234846]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить