Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze 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
Syntax
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>
Arguments
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.
column
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 .
Note
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.
AS
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żTOPklauzula na liście select instrukcjiSELECTImportant
Klauzula
ORDER BYjest używana tylko do określania wierszy zwracanych przez klauzulęTOPorOFFSETw definicji widoku. KlauzulaORDER BYnie gwarantuje uporządkowanych wyników, gdy widok zostanie zapytany, chyba żeORDER BYzostanie również określony w samym zapytaniu.Słowo kluczowe
INTOKlauzula
OPTIONOdwoł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 UNIONUNION ALL mogą być używane w select_statement.
ZAZNACZ OPCJĘ
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.
Note
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.
ENCRYPTION
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.
SCHEMABINDING
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 SCHEMABINDINGmetody , 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_METADATAfunkcji 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.
Remarks
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, DELETElub 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.
Aktualizowane widoki
Dane bazowej tabeli bazowej można modyfikować za pomocą widoku, o ile spełnione są następujące warunki:
Wszelkie modyfikacje, w tym
UPDATEinstrukcje ,INSERTiDELETE, 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,COUNTSUMMINMAXGROUPINGSTDEVSTDEVP, ,VAR, i .VARPObliczenia. 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 BYklauzule ,HAVINGlubDISTINCT.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 OFwyzwalacze można tworzyć w widoku, aby widok był aktualizowalny. WyzwalaczINSTEAD OFjest 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 OFwyzwalacz 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 OFwyzwalaczy, zobacz Wyzwalacze DML.Widoki podzielone
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 podzielone na partycje
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.
Note
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 Server2Customers_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
listNa 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 listsą tego samego typu, w tym sortowania. Nie wystarczy, aby kolumny byłyby niejawnie konwertowane, podobnie jak w przypadku .UNIONPonadto 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, ..., Tnskładowe mają odpowiednio zdefiniowane ograniczeniaC1, ..., CnCHECK dla<col>elementu .C1Ograniczenie zdefiniowane w tabeliT1musi 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 TABLEi użyjWITH CHECKopcji , 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, ..., TnTabele 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_configurelub instrukcji SET.
Warunki modyfikowania danych w widokach partycjonowanych
Następujące ograniczenia dotyczą instrukcji modyfikujących dane w widokach partycjonowanych:
Instrukcja
INSERTdostarcza wartości dla wszystkich kolumn w widoku, nawet jeśli tabele składowych bazowych mająDEFAULTograniczenie dla tych kolumn lub jeśli zezwalają naNULLwartości. W przypadku tych kolumn tabeli składowej, które mająDEFAULTdefinicje, 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.
UPDATEinstrukcje nie mogą określaćDEFAULTsłowa kluczowego jako wartości w klauzuliSET, nawet jeśli kolumna ma wartość zdefiniowanąDEFAULTw 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
INSERTlubUPDATE.Jeśli jedna z tabel składowych zawiera kolumnę znacznika czasu , nie można modyfikować danych przy użyciu instrukcji
INSERTlubUPDATE.Jeśli jedna z tabel składowych zawiera wyzwalacz lub ograniczenie,
ON UPDATE CASCADE/SET NULL/SET DEFAULTON DELETE CASCADE/SET NULL/SET DEFAULTnie można zmodyfikować widoku.INSERT,UPDATEiDELETEakcje 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
bcpinstrukcjeBULK INSERTi .INSERT ... SELECT * FROM OPENROWSET(BULK...)Można jednak wstawić wiele wierszy do widoku partycjonowanego przy użyciu instrukcji INSERT .Note
Aby zaktualizować widok partycjonowany, użytkownik musi mieć
INSERTuprawnienia ,UPDATEiDELETEw 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 SETUstaw opcję naONwartość dlaINSERTinstrukcji ,UPDATElubDELETE, 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 INSERTakcji , iUPDATEDELETE, 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
INSERTakcje 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.
Permissions
Wymaga uprawnienia CREATE VIEW w bazie danych i uprawnienia ALTER w schemacie, w którym jest tworzony widok.
Examples
W poniższych przykładach użyto AdventureWorks2025 bazy danych lub AdventureWorksDW2025 .
A. 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 AdventureWorks2025. 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, , SUPPLY2SUPPLY3i 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);
Treści powiązane
- ZMIEŃ TABELĘ (Transact-SQL)
- WIDOK ALTERA (Transact-SQL)
- USUŃ (Transact-SQL)
- WIDOK SPADNY (Transact-SQL)
- WSTAW (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)
- AKTUALIZACJA (Transact-SQL)
- DANE ZDARZEŃ (Transact-SQL)