Обновить вид после удаления таблицы - PullRequest
0 голосов
/ 22 мая 2019

У меня есть следующие таблицы:

Таблицы первой серии:

create table tbl1
(
id int,
name varchar(100)
);
insert into tbl1 values(1,'tbl1');

create table tbl2
(
id int,
name varchar(100)
);
insert into tbl2 values(1,'tbl2');

create table tbl3
(
id int,
name varchar(100)
);
insert into tbl3 values(1,'tbl3');

create table tbl4
(
id int,
name varchar(100)
);
insert into tbl4 values(1,'tbl4');

Серия двойных столов:

create table tbl11
(
id int,
name varchar(100)
);
insert into tbl11 values(1,'tbl11');

create table tbl22
(
id int,
name varchar(100)
);
insert into tbl22 values(1,'tb22');

create table tbl33
(
id int,
name varchar(100)
);
insert into tbl33 values(1,'tbl33');

create table tbl44
(
id int,
name varchar(100)
);
insert into tbl44 values(1,'tbl44');

Теперь я хочу создать VIEW таблиц каждой серии:

Серия One View:

create view View_tbl_one_series as 
select * from tbl1
union all
select * from tbl2
union all
select * from tbl3
union all
select * from tbl4

Серия Double View:

create view View_tbl_double_series as 
select * from tbl11
union all
select * from tbl22
union all
select * from tbl33
union all
select * from tbl44

После этого я по какой-то причине DROP TABLE tbl1 и создаю еще один VIEW, который содержит определение двух серийных представлений.

ПОСМОТРЕТЬ ВСЕ:

create view All_VIEW AS
select * from View_tbl_one_series
union all
select * from View_tbl_double_series

Получение ошибки:

Сообщение 208, уровень 16, состояние 1, процедура View_tbl_one_series, строка 2 Неверное имя объекта 'tbl1'.

Попробуйте

exec sp_refreshview View_tbl_one_series

но все равно получаю ту же ошибку.

Примечание : У меня много tables и views в системе баз данных, и создание представления all - последняя процедура, и между ними по какой-то причине приходится отбрасывать некоторые таблицы.

1 Ответ

0 голосов
/ 22 мая 2019

Не материализованное представление в SQL Server можно рассматривать как просто тонкую оболочку поверх базовых таблиц, которые появляются в этом представлении.Если вы отбросите одну или несколько таблиц, участвующих в представлении, это не сработает, поскольку к таблице больше нельзя обращаться с запросами.Здесь есть несколько обходных путей, одним из которых было бы просто создать индексированное (материализованное) представление:

CREATE VIEW View_tbl_one_series
WITH SCHEMABINDING
AS 
SELECT * from tbl1
UNION ALL
SELECT * from tbl2
UNION ALL
SELECT * from tbl3
UNION ALL
SELECT * from tbl4
GO
CREATE UNIQUE CLUSTERED INDEX idx ON View_tbl_one_series (id);

Другие варианты могут включать использование временной таблицы для той же цели, или, возможно, даже истинногорегулярная таблица fide.

Обратите внимание, что в общем случае выполнение SELECT * в запросе объединения не является идеальным, поскольку оставляет открытой возможность того, что столбцы / типы столбцов могут не располагаться должным образом между двумя таблицами, участвующими всоюз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...