CREATE VIEW języka Transact-SQL)

Tworzy wirtualne tabela, która reprezentuje dane w jednej lub wielu tabel w alternatywny sposób.CREATE VIEW musi być pierwszą instrukcją w instancji kwerendy.

Topic link iconKonwencje składni języka Transact-SQL

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     } 

Argumenty

  • schema_name
    To nazwa schematu, do której należy dany widok.

  • view_name
    To nazwa widoku.Nazwy widoku muszą być zgodne z regułami identyfikatorów.Określanie nazwy właściciela widoku jest opcjonalne.

  • column
    Jest to nazwa ma być używany dla kolumna w widoku.Nazwa kolumny jest wymagany tylko wtedy, gdy kolumna jest określany na podstawie wyrażenie arytmetyczne, funkcja, lub stała; po dwóch lub większej liczbie kolumn w przeciwnym razie może mieć takiej samej nazwie, zazwyczaj z powodu łączyć; lub, gdy kolumna w widoku jest określona nazwa różni się od kolumny, z którego pochodzi.Nazwy kolumn można również przypisywać w instrukcja SELECT.

    Jeśli column nie jest określony, w kolumnach widoku uzyskać takie same nazwy jak kolumny w instrukcja SELECT.

    Uwaga

    Uprawnienia dla nazwy kolumn mają zastosowanie w całym instrukcja CREATE VIEW i ALTER VIEW, niezależnie od urządzenie źródłowe danych w kolumnach widoku.Na przykład, jeśli uprawnienia są udzielane na SalesOrderID kolumna w instrukcja CREATE VIEW, instrukcja ALTER VIEW można nadać nazwę SalesOrderID inną nazwę kolumna, takie jak kolumnaOrderRefi nadal mieć uprawnienia związane z widoku przy użyciu SalesOrderID.

  • JAK
    Określa widok jest do wykonywania akcji.

  • select_statement
    Czy instrukcja SELECT definiująca widok.W instrukcja można użyć więcej niż jedna tabela i innych widoków.Odpowiednie uprawnienia są wymagane, aby zaznaczyć obiekty, do którego odwołuje się w klauzula SELECT widoku, który jest tworzony.

    Widok ma być prosty podzbiór wierszy i kolumn w jednej tabela określonej.Można utworzyć widok, która korzysta z więcej niż jedną tabela lub innych widoków w klauzula SELECT w dowolnym złożoności.

    W definicji widok indeksowany instrukcja SELECT musi być instrukcja pojedynczej tabela lub multitable łączyć z agregacja opcjonalne.

    Klauzule SELECT w definicji widoku nie mogą być następujące:

    • Klauzule COMPUTE lub COMPUTE BY

    • Klauzulę ORDER BY, chyba że dostępna jest również klauzulę TOP na liście select instrukcja SELECT

      Uwaga

      Klauzula ORDER BY jest używany tylko po to, aby określić wiersze, które są zwracane w klauzuli TOP w definicji widoku.Klauzula ORDER BY nie gwarantuje zamówione wyniki, gdy widok jest kwerenda, ORDER BY również określono w samej kwerendzie.

    • Słowa kluczowego INTO

    • Klauzula OPTION

    • Odwołanie do tabela tymczasowa lub zmiennej tabeli.

    Ponieważ select_statement używa instrukcja SELECT jest prawidłowe, należy użyć <join_hint> i <table_hint> wskazówki dotyczące określonych w klauzula FROM. Aby uzyskać więcej informacji zobacz FROM (Transact-SQL) i SELECT (Transact-SQL).

    Funkcje i wiele instrukcji SELECT, oddzielając je UNION lub UNION ALL mogą być używane w select_statement.

  • ZAZNACZ OPCJĘ
    Ustaw wszystkie instrukcje modyfikacji danych wykonywane przed widoku zgodnie z kryteriami sił w select_statement. Jeśli wiersz zostanie zmodyfikowany, korzystając z widoku, WITH Sprawdź OPCJĘ sprawdza, czy dane pozostaną widoczne przy użyciu widoku po modyfikacji jest zobowiązana.

    Uwaga

    Wszystkie aktualizacje wprowadzone bezpośrednio do odpowiednich tabel w widoku nie są weryfikowane względem w widoku, nawet jeśli zostanie określona opcja CHECK.

  • SZYFROWANIE
    Szyfruje wpisy w sys.syscomments zawierających tekst instrukcja CREATE VIEW.Za pomocą WITH szyfrowanie uniemożliwia widoku publikowana jako część replikacja w programie SQL Server.

  • SCHEMABINDING
    Wiąże widoku schematu z podstawowej tabela lub tabel.Po określeniu SCHEMABINDING podstawowej tabela lub tabel, nie mogą być modyfikowane w taki sposób, że będzie miało wpływu na definicję widoku.Sama definicja widoku musi najpierw zmodyfikowana lub porzucone usunąć zależności w tabela, która ma zostać zmodyfikowana.Kiedy używasz SCHEMABINDING, select_statement musi zawierać nazwy dwóch części (schema**.** object) tabele, widoki lub funkcje zdefiniowane przez użytkownika, do których istnieją odwołania.Wszystkie wskazane obiekty muszą być w tej samej bazie danych.

    Widoki lub tabele uczestniczące w widoku utworzone za pomocą klauzula SCHEMABINDING nie zostanie usunięty dopóki nie widoku jest usunięte lub zmienione tak, aby go nie ma już wiązanie schematu.W przeciwnym razie Database Engine zgłasza błąd. Ponadto wykonywanie instrukcji ALTER tabela niepowodzenie instrukcji na tabele uczestniczące w widokach, które mają wiązanie schematu, gdy instrukcje te mają wpływ na definicję widoku.

    SCHEMABINDING nie może być określony, jeśli widok zawiera alias kolumny Typ danych.

  • VIEW_METADATA
    Określa, że wystąpienie SQL Server powróci do biblioteki bazy danych ODBC, OLE DB API metadane informacje o widoku, a nie z podstawowej tabela lub tabel, przypadku żądania metadane w trybie przeglądania dla kwerendy, która odwołuje się do widoku. Metadane trybu przeglądania są dodatkowe metadane, wystąpienie SQL Server powoduje powrót do tych interfejsów API klient. Te metadane umożliwia API klient, aby zaimplementować kursory mogą być aktualizowane po stronie klient.Metadane w trybie przeglądania zawiera informacje o tabela bazowa, należące do kolumn zestaw wyników.

    Dla widoków utworzone za pomocą VIEW_METADATA metadane trybu przeglądania zwraca nazwę widoku, a nie nazwy tabela bazowa przy tym artykule opisano kolumny z widoku zestaw wyników.

    Po utworzeniu widoku za pomocą VIEW_METADATA WITH, jej kolumn, z wyjątkiem timestamp kolumna, można aktualizować, jeśli widok ma wyzwalaczy Z INSTEAD INSERT lub UPDATE Z INSTEAD są. Aby uzyskać więcej informacji na temat widoków można aktualizować zobacz Spostrzeżenia.

Remarks

Widok można utworzyć tylko w bieżącej bazie danych.Widok może składać się maksymalnie z 1024 kolumn.

Podczas badania korzystając z widoku Database Engine sprawdza, upewnij się, że istnieją wszystkie obiekty bazy danych, do którego odwołuje się gdziekolwiek w instrukcja są prawidłowe w kontekście instrukcja i że instrukcje modyfikacji danych nie naruszają żadnych reguł integralność danych. Sprawdź, czy nie powiedzie, zwraca komunikat o błędzie.Pomyślne wyboru tłumaczy akcja na akcja przed tabela źródłowa lub tabel.

Jeśli w widoku zależy od tabela lub widoku, który został usunięty, Database Engine generuje komunikat o błędzie, gdy każdy użytkownik próbuje korzystać z widoku. Utworzono nową tabelę lub widok z poprzedniej tabela bazowa, aby zastąpić porzucone nie zmienia strukturę tabeli, widoku ponownie będzie można używać.Zmienia się nową strukturę tabela lub widoku, w widoku musi być usunięty i utworzony ponownie.

Jeśli widok nie została utworzona za pomocą klauzula SCHEMABINDING sp_refreshview powinien być uruchamiany, gdy zostaną wprowadzone zmiany do obiektów będących podstawą widoku wpływające na definicję widoku.sp_update_category

Po utworzeniu widoku w następujących widoki wykazu przechowywane są informacje o widoku: sys.views, sys.Columns, and sys.sql_expression_dependencies.Tekst instrukcja CREATE VIEW jest przechowywany w sys.sql_modules Służy do wyświetlania katalogu.

Kwerendy, która wykorzystuje indeks do widoku zdefiniowane przy użyciu numeric lub float wyrażenia mogą mieć wynik, który różni się od podobnych kwerendy, która nie korzysta z indeksu w widoku. Różnica ta może być spowodowany zaokrąglania błędy podczas operacji INSERT, DELETE lub UPDATE sieci podlegających im tabel.

The Database Engine saves the settings of zestaw QUOTED_IDENTIFIER and zestaw ANSI_NULLS when a view is created. Oryginalne ustawienia te są używane do analizowania w widoku, gdy używany jest widok.Dlatego wszelkie ustawienia sesja klient zestaw QUOTED_IDENTIFIER i zestaw ANSI_NULLS nie mają wpływu na definicję widoku podczas uzyskiwania dostępu do widoku.

Widoki mogą być aktualizowane

Dane z podstawowej tabela bazowa, korzystając z widoku można modyfikować, ile tylko są spełnione następujące warunki:

  • Słoweński (Słowenia)

  • Slovenian_100_Slovenian_

    • Hiszpański (Argentyna) Modern_Spanish_

    • Hiszpański (Boliwia)Hiszpański (Chile)Hiszpański (Kolumbia)

  • Hiszpański (Kostaryka)

  • TOP nie jest używany dowolne miejsce w select_statement widoku wraz z klauzula WITH CHECK OPTION.

Hiszpański (Ekwador)Ogólnie rzecz biorąc Database Engine musi być jednoznacznie śledzenia zmian z definicji widoku z jednej tabela bazowa. Aby uzyskać więcej informacji zobaczModifying Data Through a View.

Hiszpański (Gwatemala)

  • Hiszpański (Honduras)

    Hiszpański (Meksyk)Hiszpański (Nikaragua)Hiszpański (Panama)Hiszpański (Paragwaj)Aby uzyskać więcej informacji o, a nie z wyzwalaczy zobacz Designing INSTEAD OF Triggers.

  • Hiszpański (Peru)

    Hiszpański (Portoryko)Kiedy jest potrzebne, Database Engine rozróżnia lokalnych widoków podzielonym na partycje jako widoki, w których wszystkie tabele uczestniczące i w widoku są w tym samym wystąpieniu SQL Server, a widoki na podzielonym na partycje jako widoki, w której co najmniej jednej z tabel w widoku znajduje się na serwerze zdalnym lub inny.

    Aby uzyskać więcej informacji na temat widoków podzielonym na partycje Zobacz Creating Partitioned Views.

Hiszpański (Peru)

Widok zdefiniowany przez UNION ALL tabel element członkowski członkowski strukturę w taki sam sposób, ale przechowywane osobno jako wielu tabel w obu tego samego wystąpienie jest widokiem podzielonym na partycje SQL Server lub w grupie autonomicznych wystąpień SQL Server serwery, nazywane serwerami stowarzyszoną baz danych.

Uwaga

Hiszpański (Urugwaj)Aby uzyskać więcej informacji zobaczTabele podzielonym na partycje i indeksów.

Hiszpański (Wenezuela)Na przykład dane dla Customers Tabela są przesyłane w trzech tabelach element członkowski w trzech miejscach serwera: Customers_33 na Server1, Customers_66 na Server2, a Customers_99 na Server3.

Widok podzielonym na partycje Server1 jest zdefiniowana 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 mmeber table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99

Ogólnie, widok nazywamy partycjonowanym, jeśli ma on jedną z następujących form:

SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn

Syriac_90_

  1. Tamilski (Indie) list

    • Tatarski (Rosja)

    • Kolumny w tej samej pozycji porządkowych każdego select list powinny być tego samego typu, łącznie z sortowania. Tatar_90_ Cyrillic_General_

      Ponadto co najmniej jedna kolumna (np. <col>) musi znajdować się na wybranych listach w tej samej pozycji porządkowych. To <col> należy określić w sposób, że tabelach element członkowski T1, ..., Tn mieć ograniczenia CHECK C1, ..., Cn zdefiniowane na <col>, odpowiednio.

      Ograniczenia C1 zdefiniowane w tabela T1 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 powinny znajdować się w taki sposób, że określone dowolną wartość z <col> spełnia, co najwyżej jeden z ograniczeniami C1, ..., Cn tak, aby z ograniczeniami powinny tworzyć zestaw rozłączna lub nonoverlapping odstępach czasu. W kolumnie <col> na której są zdefiniowane ograniczenia rozłączna nosi kolumna partycjonowania. Turkish_100_Turkish_Wyłączenie ograniczenia, należy ponownie włączyć ograniczeń sprawdzania za pomocą ograniczenia CHECK constraint_name Opcja instrukcji ALTER tabela i korzystanie z opcji WITH CHECK do sprawdzania ich poprawności.

      Uzbecki (Uzbekistan, cyrylica)

      { [col < 10], [col between 11 and 20] , [col > 20] }
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
      
    • Uzbecki (Uzbekistan, łaciński)

  2. Uzbek_Latin_100_

    • Uzbek_Latin_90_

    • Nie może być obliczana, tożsamość, ustawienie domyślne, lub timestamp Kolumna.

    • Vietnamese_100_Vietnamese_

    • Niezalecane, nie są dostępne poziom serwera

  3. Hindi T1, ..., Tn

    • Tabele mogą być lokalnej tabeli lub tabel z innych komputerów, na których jest uruchomiony SQL Server są wywoływane za pośrednictwem four-part nazwisko lub nazwa OPENDATASOURCE lub OPENROWSET oparte na. Ot przestarzałe, n dostępnych poziom serweraAby uzyskać więcej informacji zobacz OPENDATASOURCE (Transact-SQL) i OPENROWSET (Transact-SQL).

      W przypadku jednego lub kilku tabelach element członkowski zdalnego, nosi nazwę Widok rozproszony widok partycjonowanyi warunki dodatkowe mają zastosowanie.Zastąpiona nie dostępnych poziom serwera

    • Macedonii

    • Tabele członkowskie nie mogą mieć indeksów utworzonych na obliczanych kolumnach w tabeli.

    • Nie można ich używać jako serwer lub ustawień sortowania bazy danych.

    • sys.system_sql_modules (języka Transact-SQL)Wartość tego pola zestaw przy użyciu formatu Opcje użytkownika opcjisp_configure lub instrukcja zestaw.

Obiekty systemu typu FN, V PC TF, jeżeli, P, mają skojarzone modułu SQL.

Następujące ograniczenia mają zastosowanie do instrukcji modyfikujących dane w widokach partycjonowanych:

  • Numer identyfikacyjny obiektu obiektu zawierającego unikatowa w bazie danych.1 = Moduł został utworzony za pomocą opcji zestaw ANSI_NULLS bazy danych.

  • 1 = Moduł został utworzony za pomocą ON QUOTED_IDENTIFIER zestaw.

  • is_schema_bound

  • klucz podstawowy kolumn nie mogą być modyfikowane za pomocą instrukcja UPDATE, jeśli tabelach element członkowski text, ntext, lub image kolumny.

  • Kolumny w widoku, które są kolumnami tożsamości w jednej lub wielu tabelach członkowskich nie mogą być modyfikowane przy użyci instrukcji INSERT i UPDATE.

  • Jeśli jedna z tabel element członkowski zawiera timestamp kolumna danych nie mogą być modyfikowane przy użyciu instrukcja INSERT lub UPDATE.

  • 0 = Procedury nie można utworzyć za pomocą opcji WITH RECOMPILE.

  • null_on_null_input

  • Nie jest obsługiwany przez zbiorczej importowania danych do widoku podzielonym na partycje BCP lub ZBIORCZEGO INSERT i INSERT...Zawsze zwraca wartość NULLJednak wstawić wiele wierszy do wyświetlenia podzielonym na partycje przy użyciu WSTAWIANIE instrukcja.Aby uzyskać więcej informacji zobaczBulk Exporting Data from or Bulk Importing Data to a View.

    Uwaga

    Zwraca listę ról stałej bazy danych.

Dodatkowe warunki dla rozproszonych widoków partycjonowanych

Dla rozproszonych widoków partycjonowanych (gdy jedna lub wiele tabel członkowskich jest zdalnych) mają zastosowanie następujące, dodatkowe warunki:

  • Zostanie uruchomiona transakcja rozproszona, aby zapewnić atomizację między wszystkimi węzłami podlegającymi aktualizacji.

  • DbFixedRole

  • Wszystkie smallmoney i smalldatetime kolumny w zdalnym tabele, do których istnieją odwołania w widoku podzielonym na partycje są mapowane jako money i datetime, odpowiednio. Dlatego należy odpowiadające im kolumny (w tej samej pozycji porządkowych na liście select) w lokalnych tabelach money i datetime.

  • Ról stałej bazy danych, jak pokazano w poniższej tabela są zdefiniowane na poziomie bazy danych i czy masz uprawnienia do wykonywania określonych działań administracyjnych poziom bazy danych.Jest to serwer połączony, który wskazuje na ten sam wystąpienie z SQL Server.

Uprawnień udzielonych stałym rola bazy danych nie mogą być zmieniane.

Gdy element członkowski członkowski tabel i definicji widoku podzielonym na partycje znajdują się w miejscu, SQL Server optymalizator kwerendy buduje inteligentne plany, które efektywnie używać kwerendy do uzyskiwania dostępu do danych z tabel element członkowski członkowski. db_ownerWłaściciele bazy danychDlatego też chociaż niektóre tabele element członkowski może znajdować się na serwerach zdalnych, wystąpienie SQL Server w tym artykule opisano sposób eliminowania rozpowszechniane kwerendy, dzięki czemu jest minimalna ilość danych rozproszonych, które ma być przeniesione. Aby uzyskać więcej informacji na temat sposobu SQL Server w tym artykule opisano sposób eliminowania kwerendy dla widoków podzielonym na partycje, zobacz Rozpoznawanie usługi widoki podzielonym na partycje.

db_securityadmin

Administratorzy zabezpieczeń bazy danych

  • Jeśli tabel uczestniczących w replikacja łączenia lub replikacja transakcyjnej z aktualizacją subskrypcji, uniqueidentifier kolumna powinny być również włączone na liście select.

    INSERT działania do wyświetlenia podzielonym na partycje należy podać wartość NEWID() dla uniqueidentifier Kolumna. Wszystkie akcje UPDATE przed uniqueidentifier kolumna należy podać NEWID() jako wartości, ponieważ nie można użyć słowa kluczowego DEFAULT.

  • Database backup operators db_datareader

Uprawnienia

Database data readers

Przykłady

A.db_datawriter

Poniższy przykład tworzy widok za pomocą prostej SELECT Instrukcja. db_denydatareaderW tym widoku dane pochodzą z HumanResources.Employee i Person.Contact spisy AdventureWorks Baza danych. Dane zawiera nazwę i wypożyczanie informacje o datach dotyczących pracowników Adventure Works Cycles. Database deny data writers

B.The following table shows stored procedures that are used for modifying database roles.

W poniższym przykładzie użyto WITH ENCRYPTION Opcja i pokazuje obliczona kolumny, zmieniono nazwę kolumny i wiele kolumn.

C.Adds a database user to a fixed database role.

W poniższym przykładzie pokazano widok o nazwie SeattleOnly które odwołuje się pięć tabel i zezwala na zmiany danych są stosowane tylko do pracowników, którzy mieszkają w miejscowości Lublin.

D.Displays a list of the members of a fixed database role.

sp_droprolememberRemoves a member from a fixed database role.

E.The following example shows a list of all fixed database roles.

W poniższym przykładzie użyto tabele o nazwach SUPPLY1, SUPPLY2, SUPPLY3, a SUPPLY4. Returns a list of securable classes