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