poniedziałek, 22 stycznia 2018

[PL] SQL Server 2014 SP2 - odświeżanie widoków (sp_refreshview)

SQL Server wymaga odświeżenia widoku, jeżeli struktura tabeli do której się on odwołuje uległa zmianie po jego utworzeniu. W celu zademonstrowania o co chodzi, poniżej prezentuję krótki przykład.

Krok 1 - tworzymy nową tabelę i wypełniamy ją danymi
create table [dbo].[lodowka]
(
id int identity(1,1) not null primary key,
nazwa varchar(70) not null,
);
insert into [dbo].[lodowka] (nazwa)
values ('Woda Żywiec 1,5L niegazowana');

Krok 2 - wyświetlamy pełną zawartość tabeli utworzonej w poprzednim kroku

select * from [dbo].[lodowka];


Krok 3 - tworzymy widok prezentujący pełną zawartość tabeli 

CREATE VIEW dbo.v_l1
AS 
select * from [dbo].[lodowka];

Krok 4 - wywołujemy utworzony przed chwilą widok i widzimy, że prezentuje on identyczny wynik jak poprzednie zapytanie.
select * from [dbo].[v_l1];









Krok 5 - dodajemy kolejny wiersz do tabeli i sprawdzamy wyniki z poziomu widoku oraz zapytania do tabeli - są one identyczne
insert into [dbo].[lodowka] (nazwa) 
values ('Coca-Cola 1,5L');
select * from [dbo].[lodowka];
select * from [dbo].[v_l1];














Krok 6 - dodajemy nową kolumnę do tabeli i sprawdzamy wynik zapytania do widoku oraz do tabeli. 
alter table [dbo].[lodowka] add cena smallmoney;
select * from [dbo].[lodowka];
select * from [dbo].[v_l1];

W tym momencie okazuje się, że wyniki obu zapytań są różne w zakresie nowo-utworzonej kolumny.














Aby spowodować, żeby wynik zapytania do widoku prezentował identyczne dane, co wynik zapytania do tabeli, dokonujemy odświeżenia widoku korzystając z poniższego polecenia:

EXECUTE sp_refreshview '[dbo].[v_l1]';

Od teraz wyniki zapytań do widoku i do tabeli są identyczne:


Brak komentarzy:

Prześlij komentarz