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

Откуда:
Сообщений: 210
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)
Aug 19 2014 12:21:34
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 <X64> (Build : ) (Hypervisor)

1. создаем представление iii
2. переименовываем его в iii_old
3. создаем представление iii c другим кодом
4. обновляем представление iii_old
5. в результате получаем, что изменилось представление iii, оно вернулось к первоначальному значению

Вопрос - как с этим бороться? Есть ли другой, корректный, способ обновить представление?

create view iii as select 1 as f
go
exec sp_rename 'iii', 'iii_old'
go
create view iii as select 2 as g
go
exec sp_refreshview 'iii_old'


В результате выполнения sp_refreshview изменяется представление iii, возвращается к предыдущему состоянию,
те становится таким:

create view iii as select 1 as f
19 сен 19, 08:59    [21973850]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6613
Beaver,

не вижу что не так
+

DROP VIEW IF EXISTS  iii
DROP VIEW IF EXISTS iii_old
GO
create view iii as select 1 as f
go
exec sp_rename 'iii', 'iii_old'
go
create view iii as select 2 as g
go
exec sp_refreshview 'iii_old'
GO
SELECT * FROM iii_old
SELECT * FROM iii


f
-----------
1

(1 row affected)

g
-----------
2
19 сен 19, 09:16    [21973866]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29306
Beaver
те становится таким:

create view iii as select 1 as f
А как вы это проверили?
Хорошо бы репро сделать.
19 сен 19, 09:28    [21973876]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
invm
Member

Откуда: Москва
Сообщений: 8805
TaPaK,

Надо выполнять на 2008 R2 или младше. Потому что, по-моему, уже в 2012 пофиксили.


Beaver,

Была такая бага. Лечится отказом от sp_rename.
19 сен 19, 09:41    [21973892]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
andy st
Member

Откуда:
Сообщений: 761
Microsoft SQL Server 2008 R2 (SP3-GDR) (KB4057113) - 10.50.6560.0

бага есть
19 сен 19, 09:47    [21973900]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6613
Beaver,

там вроде такое лечит
после переименования

alter view iii_old as select 1 as f
19 сен 19, 09:50    [21973902]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29306
TaPaK
Beaver,

там вроде такое лечит
после переименования

alter view iii_old as select 1 as f
Тогда же смысл от переименования теряется, зачем тогда всё это?
Создал новую вьюху (или сделал alter), создал iii_old со старым содержимым (правда, непонятно зачем), и всё.
19 сен 19, 10:40    [21973953]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
Beaver
Member

Откуда:
Сообщений: 210
Сейчас ситуация следующая. Имеется порядка 1000 представлений, сколько из них в свое время были переименованы - неизвестно. Сейчас представления нужно обновить, так как изменилась структура многих таблиц. Что делать то?
19 сен 19, 11:35    [21974020]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6613
Beaver
Сейчас ситуация следующая. Имеется порядка 1000 представлений, сколько из них в свое время были переименованы - неизвестно. Сейчас представления нужно обновить, так как изменилась структура многих таблиц. Что делать то?

что мешает заскриптовать и drop/create?
19 сен 19, 11:36    [21974022]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
Shakill
Member

Откуда: мск
Сообщений: 1837
TaPaK
Beaver
Сейчас ситуация следующая. Имеется порядка 1000 представлений, сколько из них в свое время были переименованы - неизвестно. Сейчас представления нужно обновить, так как изменилась структура многих таблиц. Что делать то?

что мешает заскриптовать и drop/create?

и скрипты сохранить, а не на лету это делать ) т.к. после drop этот самый create может и не состояться
19 сен 19, 11:42    [21974030]     Ответить | Цитировать Сообщить модератору
 Re: Некорректный результат sp_refreshview  [new]
invm
Member

Откуда: Москва
Сообщений: 8805
Beaver
Что делать то?
Для начала избавиться от переименованных сущностей.

Переименованные сущности - это те объекты у которых имя отличается от имени в скрипте из object_definition.
Их заскриптовать вместе с разрешениями как drop/create и в полученном скрипте руками привести в порядок наименования.

И больше никогда не пользоваться sp_rename, пока MS не исправит ее аномалии (чего, имхо, никогда не случится)
19 сен 19, 12:38    [21974116]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить