Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w Microsoft Fabric
Magazyn w Microsoft Fabric
Baza danych SQL w Microsoft Fabric
Tworzy tabelę wirtualną, której zawartość (kolumny i wiersze) są definiowane przez zapytanie. Użyj tej instrukcji, aby utworzyć widok danych w co najmniej jednej tabeli w bazie danych. Na przykład widok może być używany do następujących celów:
Aby skupić się, uprościć i dostosować postrzeganie bazy danych przez każdego użytkownika.
Mechanizm zabezpieczeń umożliwiający użytkownikom dostęp do danych za pośrednictwem widoku bez udzielania użytkownikom uprawnień do bezpośredniego uzyskiwania dostępu do bazowych tabel bazowych.
Aby zapewnić interfejs zgodny z poprzednimi wersjami w celu emulowania tabeli, której schemat uległ zmianie.
Transact-SQL konwencje składni
Składnia
Składnia dla programu SQL Server i usługi Azure SQL Database.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Składnia dla usługi Microsoft Fabric Data Warehouse i punktu końcowego analizy SQL.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Argumenty (w programowaniu)
LUB ALTER
Dotyczy: Azure SQL Database i SQL Server (począwszy od programu SQL Server 2016 (13.x) SP1).
Warunkowo zmienia widok tylko wtedy, gdy już istnieje.
schema_name
To nazwa schematu, do którego należy widok.
view_name
To nazwa widoku. Nazwy widoków muszą być zgodne z regułami dotyczącymi identyfikatorów. Określanie nazwy właściciela widoku jest opcjonalne.
kolumna
To nazwa, która ma być używana dla kolumny w widoku. Nazwa kolumny jest wymagana tylko wtedy, gdy kolumna pochodzi z wyrażenia arytmetycznego, funkcji lub stałej; jeśli co najmniej dwie kolumny mogą mieć taką samą nazwę, zazwyczaj ze względu na sprzężenia; lub gdy kolumna w widoku jest określona nazwa inna niż kolumna, z której pochodzi. Nazwy kolumn można również przypisać w instrukcji SELECT
.
Jeśli kolumna nie jest określona, kolumny widoku uzyskują takie same nazwy jak kolumny w instrukcji SELECT
.
Uwaga
W kolumnach widoku uprawnienia do nazwy kolumny mają zastosowanie w CREATE VIEW
obrębie instrukcji lub ALTER VIEW
niezależnie od źródła danych bazowych. Jeśli na przykład uprawnienia są przyznawane w SalesOrderID
kolumnie w instrukcji CREATE VIEW, ALTER VIEW
instrukcja może nazwać SalesOrderID
kolumnę inną nazwą kolumny, taką jak OrderRef
, i nadal mieć uprawnienia skojarzone z widokiem przy użyciu polecenia SalesOrderID
.
GDY
Określa akcje, które ma wykonać widok.
select_statement
Instrukcja SELECT
definiująca widok. Instrukcja może używać więcej niż jednej tabeli i innych widoków. Odpowiednie uprawnienia są wymagane do wybrania z obiektów, do których odwołuje się SELECT
klauzula widoku, który został utworzony.
Widok nie musi być podzbiorem wierszy i kolumn jednej konkretnej tabeli. Można utworzyć widok, który używa więcej niż jednej tabeli lub innych widoków z klauzulą SELECT
dowolnej złożoności.
W definicji SELECT
widoku indeksowanego instrukcja musi być pojedynczą instrukcją tabeli lub wielotabela JOIN
z opcjonalną agregacją.
Klauzule SELECT
w definicji widoku nie mogą zawierać następujących klauzul:
Klauzula
ORDER BY
, chyba że istnieje równieżTOP
klauzula na liście select instrukcjiSELECT
Ważne
Klauzula
ORDER BY
jest używana tylko do określania wierszy zwracanych przez klauzulęTOP
orOFFSET
w definicji widoku. KlauzulaORDER BY
nie gwarantuje uporządkowanych wyników, gdy widok zostanie zapytany, chyba żeORDER BY
zostanie również określony w samym zapytaniu.Słowo kluczowe
INTO
Klauzula
OPTION
Odwołanie do tabeli tymczasowej lub zmiennej tabeli.
Ponieważ select_statement używa SELECT
instrukcji , ważne jest użycie wskazówek sprzężenia i wskazówek tabeli, jak określono w klauzuli FROM
. Aby uzyskać więcej informacji, zobacz FROM (Transact-SQL) i SELECT (Transact-SQL).
Funkcje i wiele SELECT
instrukcji rozdzielonych lub UNION
UNION ALL
mogą być używane w select_statement.
OPCJA ZAZNACZ
Wymusza wykonanie wszystkich instrukcji modyfikacji danych względem widoku w celu spełnienia kryteriów określonych w select_statement. Po zmodyfikowaniu wiersza za pomocą widoku upewnij się, WITH CHECK OPTION
że dane pozostają widoczne w widoku po zatwierdzeniu modyfikacji.
Uwaga
Dotyczy CHECK OPTION
tylko aktualizacji wprowadzonych za pośrednictwem widoku. Nie ma możliwości zastosowania do żadnych aktualizacji wykonywanych bezpośrednio w tabelach bazowych widoku.
SZYFROWANIE
Dotyczy: SQL Server 2008 (10.0.x) i nowszych oraz usługi Azure SQL Database.
Szyfruje wpisy w pliku sys.syscomments , które zawierają tekst instrukcji CREATE VIEW
. Użycie WITH ENCRYPTION
uniemożliwia publikowanie widoku w ramach replikacji programu SQL Server.
POWIĄZANIE SCHEMATU
Wiąże widok ze schematem tabeli lub tabel bazowych. Po SCHEMABINDING
określeniu tabeli podstawowej lub tabel nie można modyfikować w sposób, który będzie miał wpływ na definicję widoku. Definicja widoku musi najpierw zostać zmodyfikowana lub porzucona, aby usunąć zależności od tabeli, która ma zostać zmodyfikowana. Jeśli używasz SCHEMABINDING
metody , select_statement musi zawierać nazwy dwuczęściowe (schemat).obiekt) tabel, widoków lub funkcji zdefiniowanych przez użytkownika, do których odwołuje się odwołanie. Wszystkie obiekty, do których odwołuje się odwołanie, muszą znajdować się w tej samej bazie danych.
Widoki lub tabele, które uczestniczą w widoku utworzonym za pomocą klauzuli SCHEMABINDING, nie mogą zostać usunięte, chyba że ten widok zostanie porzucony lub zmieniony, aby nie miał już powiązania schematu. W przeciwnym razie aparat bazy danych zgłasza błąd. Ponadto wykonywanie instrukcji w tabelach uczestniczących w widokach mających powiązanie schematu kończy się niepowodzeniem ALTER TABLE
, gdy te instrukcje wpływają na definicję widoku.
VIEW_METADATA
Określa, że wystąpienie programu SQL Server powróci do biblioteki DB-Library, ODBC i OLE DB interfejsów API metadanych dotyczących widoku, zamiast tabeli podstawowej lub tabel, podczas żądania przeglądania metadanych w trybie przeglądania dla zapytania odwołującego się do widoku. Metadane trybu przeglądania to dodatkowe metadane, które wystąpienie programu SQL Server powraca do tych interfejsów API po stronie klienta. Te metadane umożliwiają interfejsom API po stronie klienta implementowanie aktualizowalnych kursorów po stronie klienta. Metadane trybu przeglądania zawierają informacje o tabeli podstawowej, do których należą kolumny w zestawie wyników.
W przypadku widoków utworzonych za pomocą VIEW_METADATA
funkcji metadane trybu przeglądania zwracają nazwę widoku, a nie nazwy tabel podstawowych podczas opisywania kolumn z widoku w zestawie wyników.
Gdy widok jest tworzony przy użyciu polecenia WITH VIEW_METADATA
, wszystkie jego kolumny, z wyjątkiem kolumny sygnatury czasowej , można aktualizować, jeśli widok ma INSTEAD OF INSERT
lub INSTEAD OF UPDATE
wyzwalacze. Aby uzyskać więcej informacji na temat aktualizowalnych widoków, zobacz Uwagi.
Uwagi
Widok można utworzyć tylko w bieżącej bazie danych. Musi CREATE VIEW
być pierwszą instrukcją w partii zapytań. Widok może mieć maksymalnie 1024 kolumny.
Podczas wykonywania zapytań za pośrednictwem widoku aparat bazy danych sprawdza, czy wszystkie obiekty bazy danych, do których odwołuje się dowolne miejsce w instrukcji, i że są prawidłowe w kontekście instrukcji , a instrukcje modyfikacji danych nie naruszają żadnych reguł integralności danych. Sprawdzanie, które kończy się niepowodzeniem, zwraca komunikat o błędzie. Pomyślne sprawdzenie przekłada akcję na akcję względem bazowej tabeli lub tabel.
Jeśli widok zależy od tabeli lub widoku, który został porzucony, aparat bazy danych generuje komunikat o błędzie, gdy ktoś spróbuje użyć widoku. Jeśli zostanie utworzona nowa tabela lub widok, a struktura tabeli nie zmieni się z poprzedniej tabeli bazowej, aby zastąpić tę porzuconą, widok ponownie stanie się bezużyteczny. Jeśli nowa tabela lub struktura widoku ulegnie zmianie, widok musi zostać usunięty i ponownie utworzony.
Jeśli widok nie zostanie utworzony za pomocą SCHEMABINDING
klauzuli , uruchom sp_refreshview , gdy zmiany zostaną wprowadzone do obiektów będących podstawą widoku, który ma wpływ na definicję widoku. W przeciwnym razie widok może wygenerować nieoczekiwane wyniki po wysłaniu zapytania.
Po utworzeniu widoku informacje o widoku są przechowywane w następujących widokach wykazu: sys.views, sys.columns i sys.sql_expression_dependencies. Tekst instrukcji CREATE VIEW
jest przechowywany w widoku katalogu sys.sql_modules .
Zapytanie korzystające z indeksu w widoku zdefiniowanym za pomocą wyrażeń liczbowych lub zmiennoprzecinkowych może mieć wynik inny niż podobne zapytanie, które nie używa indeksu w widoku. Ta różnica może być spowodowana przez zaokrąglanie błędów podczas operacji INSERT
, DELETE
lub UPDATE
akcji w tabelach bazowych.
Aparat bazy danych zapisuje ustawienia SET QUOTED_IDENTIFIER
i SET ANSI_NULLS
po utworzeniu widoku. Te oryginalne ustawienia są używane do analizowania widoku, gdy widok jest używany. W związku z tym wszystkie ustawienia SET QUOTED_IDENTIFIER
sesji klienta i SET ANSI_NULLS
nie mają wpływu na definicję widoku, gdy jest uzyskiwany dostęp do widoku.
W usłudze Azure Synapse Analytics widoki nie obsługują powiązania schematu. W związku z tym, jeśli zmiany zostaną wprowadzone w obiektach bazowych, należy usunąć i ponownie utworzyć widok, aby odświeżyć bazowe metadane. Aby uzyskać więcej informacji, zobacz Widoki języka T-SQL z dedykowaną pulą SQL i bezserwerową pulą SQL w usłudze Azure Synapse Analytics.
W usłudze Azure Synapse Analytics możliwe do zaktualizowania widoki wyzwalacze DML (typu AFTER
lub INSTEAD OF
) i widoki partycjonowane nie są obsługiwane. Aby uzyskać więcej informacji, zobacz Widoki języka T-SQL z dedykowaną pulą SQL i bezserwerową pulą SQL w usłudze Azure Synapse Analytics.
W usłudze Azure Synapse Analytics widoki partycjonowane nie są obsługiwane. Aby uzyskać więcej informacji, zobacz Widoki języka T-SQL z dedykowaną pulą SQL i bezserwerową pulą SQL w usłudze Azure Synapse Analytics.
W usłudze Fabric SQL Database można tworzyć widoki, ale nie są one dublowane w usłudze Fabric OneLake. Aby uzyskać więcej informacji, zobacz Ograniczenia dublowania bazy danych SQL w sieci szkieletowej.
Widoki z możliwością aktualizowania
Dane bazowej tabeli bazowej można modyfikować za pomocą widoku, o ile spełnione są następujące warunki:
Wszelkie modyfikacje, w tym
UPDATE
instrukcje ,INSERT
iDELETE
, muszą odwoływać się do kolumn tylko z jednej tabeli podstawowej.Kolumny modyfikowane w widoku muszą bezpośrednio odwoływać się do danych bazowych w kolumnach tabeli. Kolumny nie mogą być pochodne w żaden inny sposób, na przykład za pomocą następujących elementów:
Funkcja agregacji:
AVG
,COUNT
SUM
MIN
MAX
GROUPING
STDEV
STDEVP
, ,VAR
, i .VARP
Obliczenia. Nie można obliczyć kolumny z wyrażenia używającego innych kolumn. Kolumny, które są tworzone przy użyciu operatorów zestawu UNION, UNION ALL, CROSSJOIN, Z WYJĄTKIEM i INTERSECT są również nie do zaktualizowania.
Modyfikowane kolumny nie mają wpływu na
GROUP BY
klauzule ,HAVING
lubDISTINCT
.Top nie jest używany nigdzie w select_statement widoku wraz z klauzulą
WITH CHECK OPTION
.
Poprzednie ograniczenia dotyczą wszystkich podzapytaniów w klauzuli FROM widoku, tak jak mają zastosowanie do samego widoku. Ogólnie rzecz biorąc, aparat bazy danych musi mieć możliwość jednoznacznego śledzenia modyfikacji z definicji widoku do jednej tabeli podstawowej. Aby uzyskać więcej informacji, zobacz Modyfikowanie danych za pośrednictwem widoku.
Jeśli poprzednie ograniczenia uniemożliwiają bezpośrednie modyfikowanie danych za pośrednictwem widoku, rozważ następujące opcje:
ZAMIAST WYZWALACZY
INSTEAD OF
wyzwalacze można tworzyć w widoku, aby widok był aktualizowalny. WyzwalaczINSTEAD OF
jest wykonywany zamiast instrukcji modyfikacji danych, na której zdefiniowano wyzwalacz. Ten wyzwalacz umożliwia użytkownikowi określenie zestawu akcji, które muszą zostać wykonane w celu przetworzenia instrukcji modyfikacji danych. W związku z tym, jeśliINSTEAD OF
wyzwalacz istnieje dla widoku określonej instrukcji modyfikacji danych (INSERT
,UPDATE
, lubDELETE
), odpowiedni widok jest aktualizowalny za pomocą tej instrukcji. Aby uzyskać więcej informacji na tematINSTEAD OF
wyzwalaczy, zobacz Wyzwalacze DML.Widoki podzielone na partycje
Jeśli widok jest widokiem podzielonym na partycje, widok można aktualizować, z zastrzeżeniem pewnych ograniczeń. Gdy jest to konieczne, aparat bazy danych rozróżnia widoki partycjonowane lokalnie jako widoki, w których wszystkie uczestniczące tabele i widok znajdują się w tym samym wystąpieniu programu SQL Server, oraz rozproszone widoki partycjonowane co widoki, w których co najmniej jedna z tabel w widoku znajduje się na innym lub zdalnym serwerze.
Widoki partycjonowane
Widok podzielony na partycje jest widokiem zdefiniowanym przez UNION ALL
tabele składowe ustrukturyzowane w taki sam sposób, ale przechowywany oddzielnie jako wiele tabel w tym samym wystąpieniu programu SQL Server lub w grupie autonomicznych wystąpień serwerów programu SQL Server, nazywanych serwerami federacyjnych baz danych.
Uwaga
Preferowaną metodą partycjonowania danych lokalnych na jeden serwer jest partycjonowanie tabel. Aby uzyskać więcej informacji, zobacz Partycjonowane tabele i indeksy.
Podczas projektowania schematu partycjonowania musi być jasne, jakie dane należą do każdej partycji. Na przykład dane tabeli Customers
są dystrybuowane w trzech tabelach składowych w trzech lokalizacjach serwera: Customers_33
na , na Server1
, Customers_66
i Server2
Customers_99
na Server3
.
Widok podzielony na Server1
partycje jest zdefiniowany w następujący sposób:
--Partitioned view as defined on Server1
CREATE VIEW Customers
AS
--Select from local member table.
SELECT *
FROM CompanyData.dbo.Customers_33
UNION ALL
--Select from member table on Server2.
SELECT *
FROM Server2.CompanyData.dbo.Customers_66
UNION ALL
--Select from member table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99;
Ogólnie rzecz biorąc, widok jest postrzegany jako widok partycjonowany, jeśli ma następującą postać:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn;
Warunki tworzenia partycjonowanych widoków
Wybór
list
Na liście kolumn definicji widoku wybierz wszystkie kolumny w tabelach składowych.
Upewnij się, że kolumny w tej samej pozycji porządkowej każdego z nich
select list
są tego samego typu, w tym sortowania. Nie wystarczy, aby kolumny byłyby niejawnie konwertowane, podobnie jak w przypadku .UNION
Ponadto co najmniej jedna kolumna (na przykład
<col>
) musi być wyświetlana we wszystkich listach wyboru w tej samej pozycji porządkowej. Zdefiniuj<col>
w sposób, w jaki tabeleT1, ..., Tn
składowe mają odpowiednio zdefiniowane ograniczeniaC1, ..., Cn
CHECK dla<col>
elementu .C1
Ograniczenie zdefiniowane w tabeliT1
musi mieć następującą postać:C1 ::= < simple_interval > [ OR < simple_interval > OR ...] < simple_interval > :: = < col > { < | > | \<= | >= | = < value >} | < col > BETWEEN < value1 > AND < value2 > | < col > IN ( value_list ) | < col > { > | >= } < value1 > AND < col > { < | <= } < value2 >
Ograniczenia muszą być w taki sposób, aby każda określona wartość
<col>
mogła spełnić co najwyżej jedno z ograniczeńC1, ..., Cn
, tak aby ograniczenia tworzyły zestaw rozłącznych lub nieprzełączających się interwałów. Kolumna<col>
, w której zdefiniowano rozłączne ograniczenia, jest nazywana kolumną partycjonowania. Kolumna partycjonowania może mieć różne nazwy w tabelach bazowych. Ograniczenia muszą być w stanie włączonym i zaufanym, aby spełniały wymienione wcześniej warunki kolumny partycjonowania. Jeśli ograniczenia są wyłączone, ponownie włącz sprawdzanie ograniczeń przy użyciuCHECK CONSTRAINT *constraint_name*
opcjiALTER TABLE
i użyjWITH CHECK
opcji , aby je zweryfikować.W poniższych przykładach przedstawiono prawidłowe zestawy ograniczeń:
{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
Tej samej kolumny nie można używać wiele razy na liście wyboru.
Kolumna partycjonowania
Kolumna partycjonowania jest częścią KLUCZA PODSTAWOWEgo tabeli.
Nie może to być kolumna obliczana, tożsamość, domyślna ani sygnatura czasowa .
Jeśli w tabeli składowej istnieje więcej niż jedno ograniczenie, aparat bazy danych ignoruje wszystkie ograniczenia i nie uwzględnia ich podczas określania, czy widok jest widokiem podzielonym na partycje. Aby spełnić warunki widoku partycjonowanego, upewnij się, że w kolumnie partycjonowania istnieje tylko jedno ograniczenie partycjonowania.
Brak ograniczeń dotyczących aktualizowania kolumny partycjonowania.
Tabele składowe lub tabele bazowe
T1, ..., Tn
Tabele mogą być tabelami lokalnymi lub tabelami z innych komputerów z uruchomionym programem SQL Server, do których odwołuje się czteroczęściowa nazwa lub nazwa openDATASOURCE lub OPENROWSET. Składnia OPENDATASOURCE i OPENROWSET może określać nazwę tabeli, ale nie zapytanie przekazywane. Aby uzyskać więcej informacji, zobacz OPENDATASOURCE (Transact-SQL) i OPENROWSET (Transact-SQL).
Jeśli co najmniej jedna tabela składowa jest zdalna, widok jest nazywany widokiem podzielonym na partycje i mają zastosowanie dodatkowe warunki. Zostały one opisane w dalszej części tej sekcji.
Ta sama tabela nie może pojawić się dwa razy w zestawie tabel połączonych z instrukcją
UNION ALL
.Tabele składowe nie mogą zawierać indeksów utworzonych dla obliczonych kolumn w tabeli.
Tabele składowe mają wszystkie ograniczenia KLUCZA PODSTAWOWEgo dla tej samej liczby kolumn.
Wszystkie tabele składowe w widoku mają to samo ustawienie dopełniania ANSI. Można to ustawić przy użyciu opcji opcji użytkownika w
sp_configure
lub instrukcji SET.
Warunki modyfikowania danych w widokach partycjonowanych
Następujące ograniczenia dotyczą instrukcji modyfikujących dane w widokach partycjonowanych:
Instrukcja
INSERT
dostarcza wartości dla wszystkich kolumn w widoku, nawet jeśli tabele składowych bazowych mająDEFAULT
ograniczenie dla tych kolumn lub jeśli zezwalają naNULL
wartości. W przypadku tych kolumn tabeli składowej, które mająDEFAULT
definicje, instrukcje nie mogą jawnie używać słowa kluczowegoDEFAULT
.Wartość wstawiona do kolumny partycjonowania spełnia co najmniej jedno z podstawowych ograniczeń; w przeciwnym razie akcja wstawiania kończy się niepowodzeniem z naruszeniem ograniczenia.
UPDATE
instrukcje nie mogą określaćDEFAULT
słowa kluczowego jako wartości w klauzuliSET
, nawet jeśli kolumna ma wartość zdefiniowanąDEFAULT
w odpowiedniej tabeli składowej.Kolumny w widoku, które są kolumną tożsamości w co najmniej jednej tabeli składowej, nie mogą być modyfikowane przy użyciu instrukcji
INSERT
lubUPDATE
.Jeśli jedna z tabel składowych zawiera kolumnę znacznika czasu , nie można modyfikować danych przy użyciu instrukcji
INSERT
lubUPDATE
.Jeśli jedna z tabel składowych zawiera wyzwalacz lub ograniczenie,
ON UPDATE CASCADE/SET NULL/SET DEFAULT
ON DELETE CASCADE/SET NULL/SET DEFAULT
nie można zmodyfikować widoku.INSERT
,UPDATE
iDELETE
akcje względem widoku partycjonowanego są niedozwolone, jeśli istnieje samosprzężenia z tym samym widokiem lub z dowolną tabelą składową w instrukcji .Zbiorcze importowanie danych do widoku partycjonowanego nie jest obsługiwane przez
bcp
instrukcjeBULK INSERT
i .INSERT ... SELECT * FROM OPENROWSET(BULK...)
Można jednak wstawić wiele wierszy do widoku partycjonowanego przy użyciu instrukcji INSERT .Uwaga
Aby zaktualizować widok partycjonowany, użytkownik musi mieć
INSERT
uprawnienia ,UPDATE
iDELETE
w tabelach składowych.
Dodatkowe warunki dla rozproszonych widoków partycjonowanych
W przypadku widoków podzielonych na partycje rozproszone (gdy co najmniej jedna tabela składowa jest zdalna), obowiązują następujące dodatkowe warunki:
Transakcja rozproszona jest uruchamiana w celu zagwarantowania niepodzielności we wszystkich węzłach, na które ma wpływ aktualizacja.
XACT_ABORT SET
Ustaw opcję naON
wartość dlaINSERT
instrukcji ,UPDATE
lubDELETE
, aby działały.Wszystkie kolumny w tabelach zdalnych typu smallmoney , do których odwołuje się widok partycjonowany, są mapowane jako pieniądze. W związku z tym odpowiednie kolumny (w tej samej pozycji porządkowej na liście wyboru) w tabelach lokalnych muszą być również typu pieniądze.
W obszarze zgodność bazy danych poziom 110 i wyższy wszystkie kolumny w tabelach zdalnych typu smalldatetime , które są przywoływane w widoku partycjonowanym, są mapowane jako smalldatetime. Odpowiednie kolumny (w tej samej pozycji porządkowej na liście wyboru) w tabelach lokalnych muszą być małedatetime. Jest to zmiana zachowania z wcześniejszych wersji programu SQL Server, w których wszystkie kolumny w tabelach zdalnych typu smalldatetime , które są przywoływane w widoku partycjonowanym, są mapowane jako data/godzina , a odpowiadające im kolumny w tabelach lokalnych muszą być typu data/godzina. Aby uzyskać więcej informacji, zobacz ALTER DATABASE Compatibility Level (Transact-SQL).
Żaden połączony serwer w widoku podzielonym na partycje nie może być serwerem połączonym sprzężonym. Jest to serwer połączony, który wskazuje to samo wystąpienie programu SQL Server.
Ustawienie SET ROWCOUNT
opcji jest ignorowane dla INSERT
akcji , iUPDATE
DELETE
, które obejmują aktualizowalne widoki partycjonowane i tabele zdalne.
Gdy tabele składowe i zdefiniowana definicja widoku partycjonowanego są tworzone, optymalizator zapytań programu SQL Server tworzy inteligentne plany korzystające z zapytań w celu wydajnego uzyskiwania dostępu do danych z tabel składowych. W przypadku CHECK
definicji ograniczeń procesor zapytań mapuje rozkład wartości kluczy w tabelach składowych. Gdy użytkownik wystawia zapytanie, procesor zapytań porównuje mapę z wartościami określonymi w WHERE
klauzuli i tworzy plan wykonywania z minimalną ilością transferu danych między serwerami członkowskim. W związku z tym, jeśli niektóre tabele członkowskie znajdują się na serwerach zdalnych, wystąpienie programu SQL Server rozwiązuje rozproszone zapytania, tak aby ilość rozproszonych danych, które mają być przesyłane, jest minimalna.
Zagadnienia dotyczące replikacji
Aby utworzyć widoki partycjonowane w tabelach składowych, które są zaangażowane w replikację, należy wziąć pod uwagę następujące kwestie:
Jeśli tabele bazowe są zaangażowane w replikację scalania lub replikację transakcyjną z aktualizowaniem subskrypcji, upewnij się, że unikatowa kolumnaidentyfikatora jest również uwzględniona na liście wyboru.
Wszystkie
INSERT
akcje w widoku podzielonym na partycje muszą podaćNEWID()
wartość dla kolumny uniqueidentifier . Wszystkie akcje UPDATE względem kolumny uniqueidentifier muszą być dostarczaneNEWID()
jako wartość, ponieważ nie można użyć słowa kluczowego DEFAULT.Replikacja aktualizacji wykonanych przy użyciu widoku jest taka sama jak w przypadku replikacji tabel w dwóch różnych bazach danych: tabele są obsługiwane przez różnych agentów replikacji, a kolejność aktualizacji nie jest gwarantowana.
Uprawnienia
Wymaga uprawnienia CREATE VIEW w bazie danych i uprawnienia ALTER w schemacie, w którym jest tworzony widok.
Przykłady
W poniższych przykładach użyto AdventureWorks2022
bazy danych lub AdventureWorksDW2022
.
Odp. Tworzenie widoku za pomocą polecenia CREATE VIEW
Poniższy przykład tworzy widok przy użyciu instrukcji SELECT
. Prosty widok jest przydatny w przypadku częstego wykonywania zapytań dotyczących kombinacji kolumn. Dane z tego widoku pochodzą z HumanResources.Employee
tabel i Person.Person
bazy danych AdventureWorks2022. Dane zawierają informacje o nazwie i dacie zatrudnienia pracowników cyklu Adventure Works Cycles. Widok można utworzyć dla osoby odpowiedzialnej za śledzenie rocznic pracy, ale bez udzielania tej osobie dostępu do wszystkich danych w tych tabelach.
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. Używanie funkcji WITH ENCRYPTION
W poniższym przykładzie użyto WITH ENCRYPTION
opcji i przedstawiono obliczone kolumny, kolumny o zmienionej nazwie i wiele kolumn.
Dotyczy: SQL Server 2008 (10.0.x) i nowsze oraz SQL Database.
CREATE VIEW Purchasing.PurchaseOrderReject
WITH ENCRYPTION
AS
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,
RejectedQty / ReceivedQty AS RejectRatio, DueDate
FROM Purchasing.PurchaseOrderDetail
WHERE RejectedQty / ReceivedQty > 0
AND DueDate > CONVERT(DATETIME,'20010630',101) ;
GO
C. UŻYJ OPCJI WYBORU Z OPCJĄ WYBORU
W poniższym przykładzie przedstawiono widok o nazwie dbo.SeattleOnly
, który odwołuje się do pięciu tabel i umożliwia modyfikacje danych, które mają zastosowanie tylko do pracowników mieszkających w Seattle.
CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
D. Używanie wbudowanych funkcji w widoku
W poniższym przykładzie przedstawiono definicję widoku, która zawiera wbudowaną funkcję. W przypadku korzystania z funkcji należy określić nazwę kolumny pochodnej.
CREATE VIEW Sales.SalesPersonPerform
AS
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)
GROUP BY SalesPersonID;
GO
E. Używanie danych partycjonowanych
W poniższym przykładzie użyto tabel o nazwach SUPPLY1
, , SUPPLY2
SUPPLY3
i SUPPLY4
. Te tabele odpowiadają tabelom dostawców z czterech biur znajdujących się w różnych regionach.
--Create the tables and insert the values.
CREATE TABLE dbo.SUPPLY1 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY2 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY3 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY4 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),
supplier CHAR(50)
);
GO
--Create the view that combines all supplier tables.
CREATE VIEW dbo.all_supplier_view
WITH SCHEMABINDING
AS
SELECT supplyID, supplier
FROM dbo.SUPPLY1
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY2
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY3
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY4;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
F. Tworzenie widoku przez łączenie dwóch tabel
Poniższy przykład tworzy widok przy użyciu SELECT
instrukcji z elementem OUTER JOIN
. Wyniki zapytania sprzężenia wypełniają widok.
CREATE VIEW view1
AS
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey,
fis.SalesTerritoryKey, dst.SalesTerritoryRegion
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimSalesTerritory AS dst
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);
Powiązana zawartość
- ALTER TABLE (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- Utwórz procedurę składowaną
- sys.dm_sql_referenced_entities (Transact-SQL)
- sys.dm_sql_referencing_entities (Transact-SQL)
- sp_help (Transact-SQL)
- sp_helptext (Transact-SQL)
- sp_refreshview (Transact-SQL)
- sp_rename (Transact-SQL)
- sys.views (Transact-SQL)
- UPDATE (Transact-SQL)
- EVENTDATA (Transact-SQL)