Sdílet prostřednictvím


CREATE VIEW (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabricdatabáze SQL v Microsoft Fabric

Vytvoří virtuální tabulku, jejíž obsah (sloupce a řádky) definuje dotaz. Tento příkaz použijte k vytvoření zobrazení dat v jedné nebo více tabulkách v databázi. Zobrazení lze například použít pro následující účely:

  • Zaměřit se, zjednodušit a přizpůsobit vnímání každého uživatele v databázi.

  • Jako bezpečnostní mechanismus tím, že uživatelům umožní přístup k datům prostřednictvím zobrazení, aniž by uživatelé udělili oprávnění k přímému přístupu k podkladovým základním tabulkám.

  • Poskytnutí zpětně kompatibilního rozhraní pro emulaci tabulky, jejíž schéma se změnilo.

Transact-SQL konvence syntaxe

Syntaxe

Syntaxe pro SQL Server a 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 ]
}

Syntaxe pro Azure Synapse Analytics a paralelní datový sklad

CREATE VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  

<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>  

Syntaxe koncového bodu Microsoft Fabric Data Warehouse a SQL Analytics

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

NEBO ALTER

Platí pro: Azure SQL Database a SQL Server (počínaje SQL Serverem 2016 (13.x) SP1).

Podmíněně změní zobrazení pouze v případě, že již existuje.

schema_name
Je název schématu, do kterého zobrazení patří.

view_name
Je název zobrazení. Názvy zobrazení musí dodržovat pravidla pro identifikátory. Zadání jména vlastníka zobrazení je volitelné.

sloupce
Je název, který se má použít pro sloupec v zobrazení. Název sloupce se vyžaduje pouze v případě, že je sloupec odvozen z aritmetického výrazu, funkce nebo konstanty; pokud dva nebo více sloupců může jinak mít stejný název, obvykle kvůli spojení; nebo je-li sloupec v zobrazení zadán jiný název než sloupec, ze kterého je odvozen. Názvy sloupců lze také přiřadit v SELECT příkazu.

Pokud sloupec není zadaný, sloupce zobrazení získávají stejné názvy jako sloupce v SELECT příkazu.

Poznámka:

Ve sloupcích zobrazení platí oprávnění pro název sloupce napříč příkazem nebo CREATE VIEW příkazem ALTER VIEW bez ohledu na zdroj podkladových dat. Pokud jsou například oprávnění udělena pro SalesOrderID sloupec v příkazu CREATE VIEW, ALTER VIEW může příkaz pojmenovat SalesOrderID sloupec jiným názvem sloupce, například OrderRefa stále mít oprávnění přidružená k zobrazení pomocí SalesOrderID.

PROTOŽE

Určuje akce, které má zobrazení provést.

select_statement

Příkaz SELECT , který definuje zobrazení. Příkaz může používat více než jednu tabulku a další zobrazení. K výběru z objektů odkazovaných v SELECT klauzuli vytvořeného zobrazení se vyžadují příslušná oprávnění.

Zobrazení nemusí být podmnožinou řádků a sloupců jedné konkrétní tabulky. Lze vytvořit zobrazení, které používá více než jednu tabulku nebo jiná zobrazení s SELECT klauzulí jakékoli složitosti.

V definici SELECT indexovaného zobrazení musí být příkazem jedna tabulka nebo vícetable JOIN s volitelnou agregací.

Klauzule SELECT v definici zobrazení nesmí obsahovat:

  • KlauzuleORDER BY, pokud není v seznamu select příkazu TOP ani SELECT klauzule

    Důležité

    Klauzule ORDER BY slouží pouze k určení řádků vrácených TOP klauzulí nebo OFFSET klauzulí v definici zobrazení. Klauzule ORDER BY nezaručuje seřazené výsledky při dotazování, pokud ORDER BY není také zadán v samotném dotazu.

  • Klíčové slovo INTO

  • Klauzule OPTION

  • Odkaz na dočasnou tabulku nebo proměnnou tabulky.

Vzhledem k tomu, že select_statement používá příkaz SELECT , je platný použít rady spojení a rady tabulky, jak je uvedeno v FROM klauzuli. Další informace naleznete v tématu FROM (Transact-SQL) a SELECT (Transact-SQL).

Funkce a více SELECT příkazů oddělených UNION nebo UNION ALL je možné je použít v select_statement.

CHECK OPTION

Vynutí, aby všechny příkazy pro úpravy dat provedené v zobrazení dodržovaly kritéria nastavená v rámci select_statement. Když se řádek upraví prostřednictvím zobrazení, WITH CHECK OPTION zajistí, aby data zůstala viditelná prostřednictvím zobrazení po potvrzení změny.

Poznámka:

Jediné CHECK OPTION platí pro aktualizace provedené v zobrazení. Nemá žádnou použitelnost pro žádné aktualizace provedené přímo v podkladových tabulkách zobrazení.

ŠIFROVÁNÍ

platí pro: SQL Server 2008 (10.0.x) a novější a Azure SQL Database.

Zašifruje položky v sys.syscomments , které obsahují text CREATE VIEW příkazu. Použití WITH ENCRYPTION zabraňuje publikování zobrazení v rámci replikace SQL Serveru.

SCHEMABINDING

Vytvoří vazbu zobrazení na schéma podkladové tabulky nebo tabulek. Při SCHEMABINDING zadání nelze základní tabulku nebo tabulky upravit způsobem, který by ovlivnil definici zobrazení. Samotná definice zobrazení musí být nejprve upravena nebo vyřazena, aby se odebraly závislosti na tabulce, která se má upravit. Při použití SCHEMABINDINGmusí select_statement obsahovat názvy dvou částí (schéma).object) tabulek, zobrazení nebo uživatelem definovaných funkcí, na které odkazují. Všechny odkazované objekty musí být ve stejné databázi.

Zobrazení nebo tabulky, které se účastní zobrazení vytvořené pomocí klauzule SCHEMABINDING, nelze vynechat, pokud toto zobrazení nezahodí nebo nezmění tak, aby již nemělo vazbu schématu. V opačném případě databázový stroj vyvolá chybu. Provádění příkazů u tabulek, které se účastní zobrazení s vazbou schématu, ALTER TABLE selže, když tyto příkazy ovlivňují definici zobrazení.

VIEW_METADATA

Určuje, že instance SQL Serveru se vrátí do rozhraní API knihovny DB, ODBC a OLE DB informace o metadatech zobrazení, nikoli základní tabulky nebo tabulek, při vyžádání metadat režimu procházení pro dotaz, který odkazuje na zobrazení. Metadata režimu procházení jsou další metadata, která instance SQL Serveru vrátí do těchto rozhraní API na straně klienta. Tato metadata umožňují rozhraním API na straně klienta implementovat aktualizovatelné kurzory na straně klienta. Metadata v režimu procházení obsahují informace o základní tabulce, do které patří sloupce v sadě výsledků.

U zobrazení vytvořených pomocí VIEW_METADATAmetadat režimu procházení vrátí název zobrazení, nikoli názvy základních tabulek, pokud popisuje sloupce ze zobrazení v sadě výsledků.

Pokud je zobrazení vytvořeno pomocí WITH VIEW_METADATA, všechny jeho sloupce s výjimkou sloupce časového razítka , jsou aktualizovatelné, pokud zobrazení obsahuje INSTEAD OF INSERT nebo INSTEAD OF UPDATE aktivuje. Další informace o aktualizovatelných zobrazeních naleznete v tématu Poznámky.

Poznámky

Zobrazení lze vytvořit pouze v aktuální databázi. Musí CREATE VIEW to být první příkaz v dávce dotazu. Zobrazení může mít maximálně 1 024 sloupců.

Při dotazování prostřednictvím zobrazení databázový stroj zkontroluje, zda všechny databázové objekty odkazované kdekoli v příkazu existují a že jsou platné v kontextu příkazu a že příkazy pro úpravy dat neporušují žádná pravidla integrity dat. Kontrola, která selže, vrátí chybovou zprávu. Úspěšná kontrola přeloží akci na akci s podkladovou tabulkou nebo tabulkami.

Pokud zobrazení závisí na tabulce nebo zobrazení, které bylo vyřazeno, databázový stroj vytvoří chybovou zprávu, když se někdo pokusí použít zobrazení. Pokud se vytvoří nová tabulka nebo zobrazení a struktura tabulky se nezmění z předchozí základní tabulky, aby nahradila vyřazenou tabulku, bude možné zobrazení znovu použít. Pokud se nová tabulka nebo struktura zobrazení změní, je nutné zobrazení převést a znovu vytvořit.

Pokud se pomocí klauzule nevytvořilo SCHEMABINDING zobrazení, spusťte sp_refreshview při změnách objektů podkladového zobrazení, které ovlivňují definici zobrazení. V opačném případě může zobrazení při dotazech způsobit neočekávané výsledky.

Při vytvoření zobrazení jsou informace o zobrazení uloženy v následujících zobrazeních katalogu: sys.views, sys.columns a sys.sql_expression_dependencies. Text CREATE VIEW příkazu je uložen v zobrazení katalogu sys.sql_modules .

Dotaz, který používá index v zobrazení definovaném číselnými nebo plovoucími výrazy, může mít výsledek, který se liší od podobného dotazu, který v zobrazení nepoužívá index. Tento rozdíl může být způsoben zaokrouhlením chyb během INSERT, DELETEnebo UPDATE akcí v podkladových tabulkách.

Databázový stroj uloží nastavení SET QUOTED_IDENTIFIER a SET ANSI_NULLS při vytvoření zobrazení. Tato původní nastavení slouží k analýze zobrazení při použití zobrazení. Proto všechna nastavení relace klienta pro SET QUOTED_IDENTIFIER a SET ANSI_NULLS nemají vliv na definici zobrazení při přístupu k zobrazení.

V Azure Synapse Analytics zobrazení nepodporují vazbu schématu. Proto pokud jsou provedeny změny v podkladových objektech, měli byste zobrazení odstranit a znovu vytvořit, aby se aktualizovala podkladová metadata. Další informace najdete v tématu Zobrazení T-SQL s vyhrazeným fondem SQL a bezserverovým fondem SQL ve službě Azure Synapse Analytics.

V Azure Synapse Analytics se nepodporují aktualizovatelná zobrazení, triggery DML (typu AFTER nebo INSTEAD OF) a dělené zobrazení. Další informace najdete v tématu Zobrazení T-SQL s vyhrazeným fondem SQL a bezserverovým fondem SQL ve službě Azure Synapse Analytics.

V Azure Synapse Analytics se rozdělená zobrazení nepodporují. Další informace najdete v tématu Zobrazení T-SQL s vyhrazeným fondem SQL a bezserverovým fondem SQL ve službě Azure Synapse Analytics.

V databázi FABRIC SQL je možné vytvořit zobrazení, ale nejsou zrcadlené do Fabric OneLake. Další informace naleznete v tématu Omezení zrcadlení databáze Fabric SQL.

Aktualizovatelná zobrazení

Data podkladové základní tabulky můžete upravit pomocí zobrazení, pokud jsou splněné následující podmínky:

  • Jakékoli úpravy, včetně UPDATEINSERT, a DELETE příkazů, musí odkazovat na sloupce pouze z jedné základní tabulky.

  • Sloupce upravené v zobrazení musí přímo odkazovat na podkladová data ve sloupcích tabulky. Sloupce nelze odvodit jiným způsobem, například pomocí následujících:

    • Agregační funkce: , , , AVGCOUNTSUMMINMAX, GROUPING, STDEV, a .STDEVPVARVARP

    • Výpočet. Sloupec nelze vypočítat z výrazu, který používá jiné sloupce. Sloupce, které jsou vytvořeny pomocí operátory sady UNION, UNION ALL, CROSSJOIN, EXCEPT a INTERSECT množství pro výpočet a nejsou také aktualizovatelné.

  • Upravované sloupce nejsou ovlivněny GROUP BYklauzulí , HAVINGani DISTINCT klauzulí.

  • Top se nepoužívá nikde v select_statement zobrazení společně s klauzulí WITH CHECK OPTION .

Předchozí omezení platí pro všechny poddotazy v klauzuli FROM zobrazení stejně jako u samotného zobrazení. Obecně platí, že databázový stroj musí být schopen jednoznačně sledovat úpravy z definice zobrazení do jedné základní tabulky. Další informace naleznete v tématu Úprava dat prostřednictvím zobrazení.

Pokud předchozí omezení brání úpravě dat přímo prostřednictvím zobrazení, zvažte následující možnosti:

  • MÍSTO aktivačních událostí

    INSTEAD OF Triggery je možné vytvořit v zobrazení, aby bylo možné zobrazení aktualizovat. Trigger INSTEAD OF se spustí místo příkazu pro úpravu dat, na kterém je aktivační událost definována. Tento trigger umožňuje uživateli určit sadu akcí, ke kterým musí dojít ke zpracování příkazu pro úpravu dat. Proto pokud aktivační událost existuje pro zobrazení konkrétního INSTEAD OF příkazu pro úpravu dat (INSERTUPDATE, nebo DELETE), odpovídající zobrazení je možné aktualizovat prostřednictvím tohoto příkazu. Další informace o aktivačních událostech najdete v INSTEAD OF tématu Triggery DML.

  • Dělené zobrazení

    Pokud je zobrazení rozdělené do oddílů, je zobrazení aktualizovatelné a podléhá určitým omezením. V případě potřeby databázový stroj rozlišuje místní rozdělená zobrazení jako zobrazení, ve kterých jsou všechny zúčastněné tabulky a zobrazení na stejné instanci SQL Serveru, a distribuovaná rozdělená zobrazení jako zobrazení, ve kterých se alespoň jedna z tabulek v zobrazení nachází na jiném nebo vzdáleném serveru.

Dělené zobrazení

Rozdělené zobrazení je zobrazení definované UNION ALL členskou tabulkou strukturovanou stejným způsobem, ale ukládá se samostatně jako více tabulek ve stejné instanci SQL Serveru nebo ve skupině autonomních instancí serverů SQL Serveru, označovaných jako federované databázové servery.

Poznámka:

Upřednostňovaná metoda rozdělení dat na jeden server je prostřednictvím dělených tabulek. Další informace najdete v tématu dělené tabulky a indexy.

Při návrhu schématu dělení musí být jasné, jaká data patří do každého oddílu. Například data pro tabulku se distribuují Customers do tří členských tabulek ve třech serverových umístěních: Customers_33 on Server1, Customers_66 on Server2a Customers_99 on Server3.

Rozdělené zobrazení Server1 je definováno následujícím způsobem:

--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;  

Obecně platí, že zobrazení je rozdělené zobrazení, pokud se jedná o následující formulář:

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

Podmínky pro vytváření dělených zobrazení

  1. Výběr list

    • V seznamu sloupců definice zobrazení vyberte všechny sloupce v tabulkách členů.

    • Ujistěte se, že sloupce ve stejné řadové pozici každého select list typu mají stejný typ, včetně kolací. Není dostačující, aby sloupce byly implicitně konvertibilní typy, stejně jako obecně platí pro UNION.

      Také alespoň jeden sloupec (například <col>) musí být ve všech vybraných seznamech ve stejné řadové pozici. Definujte <col> tak, aby členské tabulky T1, ..., Tn měly definovaná omezení C1, ..., Cn CHECK v <col>uvedeném pořadí.

      C1 Omezení definované v tabulce T1 musí mít následující tvar:

      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 >  
      
    • Omezení musí být takovým způsobem, aby jakákoli zadaná hodnota <col> maximálně splňovala jedno z omezení C1, ..., Cn , aby omezení vytvořila sadu nesouvisejících nebo nepřekryvných intervalů. Sloupec <col> , na kterém jsou definována oddělená omezení, se nazývá sloupec dělení. Sloupec dělení může mít v podkladových tabulkách různé názvy. Omezení musí být v povoleném a důvěryhodném stavu, aby splňovaly dříve uvedené podmínky sloupce dělení. Pokud jsou omezení zakázaná, znovu povolte kontrolu omezení pomocí CHECK CONSTRAINT *constraint_name* možnosti ALTER TABLEa pomocí WITH CHECK možnosti je ověřte.

      Následující příklady ukazují platné sady omezení:

      { [col < 10], [col between 11 and 20] , [col > 20] }  
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }  
      
    • Stejný sloupec nelze použít vícekrát v seznamu výběru.

  2. Dělení sloupce

    • Sloupec dělení je součástí primárního klíče tabulky.

    • Nemůže se jednat o počítaný sloupec, identitu, výchozí nebo časové razítko .

    • Pokud je ve stejném sloupci v tabulce členů více omezení, databázový stroj ignoruje všechna omezení a při určování, jestli je zobrazení rozdělené do oddílů, nebere v úvahu. Pokud chcete splnit podmínky rozděleného zobrazení, ujistěte se, že ve sloupci dělení existuje pouze jedno omezení dělení.

    • Pro aktualizovatelnost sloupce dělení neexistují žádná omezení.

  3. Členské tabulky nebo podkladové tabulky T1, ..., Tn

    • Tyto tabulky můžou být buď místní tabulky, nebo tabulky z jiných počítačů, na kterých běží SQL Server, na které se odkazuje, a to buď prostřednictvím čtyřdílného názvu, nebo názvu založeného na OPENDATASOURCE nebo OPENROWSET. Syntaxe OPENDATASOURCE a OPENROWSET může zadat název tabulky, ale ne předávací dotaz. Další informace naleznete v tématu OPENDATASOURCE (Transact-SQL) a OPENROWSET (Transact-SQL).

      Pokud jsou některé členské tabulky vzdálené, zobrazení se nazývá distribuované rozdělené zobrazení a platí další podmínky. Jsou popsány dále v této části.

    • Stejná tabulka se nemůže v sadě tabulek, které se kombinují s příkazem UNION ALL , zobrazit dvakrát.

    • Členské tabulky nemohou mít indexy vytvořené na počítaných sloupcích v tabulce.

    • Členské tabulky mají všechna omezení PRIMÁRNÍHO KLÍČE na stejný počet sloupců.

    • Všechny členské tabulky v zobrazení mají stejné nastavení odsazení ANSI. Tuto možnost lze nastavit pomocí možnosti uživatele nebo sp_configure příkazu SET.

Podmínky pro úpravu dat v dělených zobrazeních

Následující omezení platí pro příkazy, které upravují data v rozdělených zobrazeních:

  • Příkaz INSERT poskytuje hodnoty pro všechny sloupce v zobrazení, i když mají podkladové členské tabulky DEFAULT omezení pro tyto sloupce nebo pokud umožňují NULL hodnoty. Pro sloupce členské tabulky, které mají DEFAULT definice, příkazy nemohou explicitně použít klíčové slovo DEFAULT.

  • Hodnota vložená do sloupce dělení splňuje alespoň jedno z podkladových omezení; jinak akce vložení selže s porušením omezení.

  • UPDATE příkazy nemohou zadat DEFAULT klíčové slovo jako hodnotu v SET klauzuli, i když sloupec má hodnotu definovanou DEFAULT v odpovídající členské tabulce.

  • Sloupce v zobrazení, které jsou sloupcem identity v jedné nebo více členských tabulkách, nelze upravit pomocí INSERT příkazu nebo UPDATE příkazu.

  • Pokud jedna z tabulek členů obsahuje sloupec časového razítka , nelze data změnit pomocí INSERT příkazu nebo UPDATE příkazu.

  • Pokud jedna z členských tabulek obsahuje aktivační událost nebo ON UPDATE CASCADE/SET NULL/SET DEFAULTON DELETE CASCADE/SET NULL/SET DEFAULT omezení, nelze zobrazení upravit.

  • INSERT, UPDATEa DELETE akce proti děleným zobrazením nejsou povoleny, pokud existuje spojení se stejným zobrazením nebo s některou z tabulek členů v příkazu.

  • Hromadné importování dat do rozděleného zobrazení není podporováno bcp pomocí příkazů nebo BULK INSERTINSERT ... SELECT * FROM OPENROWSET(BULK...) příkazů. Do rozděleného zobrazení ale můžete vložit více řádků pomocí příkazu INSERT .

    Poznámka:

    Pokud chcete aktualizovat rozdělené zobrazení, musí mít INSERTUPDATEuživatel oprávnění a DELETE oprávnění k tabulkám členů.

Další podmínky pro distribuovaná dělená zobrazení

Pro distribuovaná dělená zobrazení (pokud jsou vzdálená jedna nebo více členských tabulek), platí následující další podmínky:

  • Distribuovaná transakce se spustí, aby se zajistila atomicita napříč všemi uzly ovlivněnými aktualizací.

  • XACT_ABORT SET Nastavte možnost pro ONINSERT, UPDATEnebo DELETE příkazy, které mají fungovat.

  • Všechny sloupce ve vzdálených tabulkách typu smallmoney , na které se odkazuje v děleném zobrazení, se mapují jako peníze. Proto odpovídající sloupce (ve stejném pořadí v seznamu výběrů) v místních tabulkách musí být také typu peníze.

  • V rámci úrovně kompatibility databáze 110 a vyšší jsou všechny sloupce ve vzdálených tabulkách typu smalldatetime , na které se odkazuje v děleném zobrazení, mapovány jako smalldatetime. Odpovídající sloupce (ve stejném pořadí v seznamu výběrů) v místních tabulkách musí být smalldatetime. Jedná se o změnu chování ze starších verzí SQL Serveru, ve kterém všechny sloupce ve vzdálených tabulkách typu smalldatetime , na které se odkazuje v děleném zobrazení, se mapují jako datum a čas a odpovídající sloupce v místních tabulkách musí být typu datetime. Další informace naleznete v tématu ALTER DATABASE Úroveň kompatibility (Transact-SQL).

  • Žádný propojený server v rozděleném zobrazení nemůže být propojeným serverem zpětné smyčky. Jedná se o propojený server, který odkazuje na stejnou instanci SQL Serveru.

Nastavení SET ROWCOUNT možnosti je ignorováno pro INSERTUPDATE, a DELETE akce, které zahrnují aktualizovatelné dělené zobrazení a vzdálené tabulky.

Když jsou zavedeny členské tabulky a definice rozděleného zobrazení, optimalizátor dotazů SQL Serveru sestaví inteligentní plány, které efektivně používají dotazy pro přístup k datům z členských tabulek. CHECK S definicemi omezení mapuje procesor dotazů distribuci hodnot klíčů napříč tabulkami členů. Když uživatel vydá dotaz, procesor dotazů porovná mapu s hodnotami zadanými v WHERE klauzuli a sestaví plán provádění s minimálním objemem přenosu dat mezi členskými servery. Proto pokud jsou některé členské tabulky umístěné na vzdálených serverech, instance SQL Serveru překládá distribuované dotazy tak, aby množství distribuovaných dat, která je potřeba přenést, bylo minimální.

Důležité informace o replikaci

Pokud chcete vytvořit rozdělená zobrazení pro členské tabulky, které jsou součástí replikace, platí následující aspekty:

  • Pokud jsou podkladové tabulky zapojeny do slučovací replikace nebo transakční replikace s aktualizací předplatných, ujistěte se, že sloupec uniqueidentifier je také zahrnut do seznamu výběrů.

    Všechny INSERT akce v děleném zobrazení musí obsahovat NEWID() hodnotu sloupce uniqueidentifier . Všechny akce UPDATE pro sloupec uniqueidentifier musí být zadaná NEWID() jako hodnota, protože výchozí klíčové slovo nelze použít.

  • Replikace aktualizací provedených pomocí zobrazení je stejná jako při replikaci tabulek ve dvou různých databázích: tabulky obsluhují různí agenti replikace a pořadí aktualizací není zaručené.

Dovolení

Vyžaduje oprávnění CREATE VIEW v databázi a ALTER oprávnění ke schématu, ve kterém se zobrazení vytváří.

Příklady

Následující příklady používají AdventureWorks2022 databázi nebo AdventureWorksDW2022 databázi.

A. Vytvoření zobrazení pomocí funkce CREATE VIEW

Následující příklad vytvoří zobrazení pomocí SELECT příkazu. Jednoduché zobrazení je užitečné, když se často dotazuje kombinace sloupců. Data z tohoto zobrazení pocházejí z HumanResources.Employee databází AdventureWorks2022 a Person.Person tabulek. Data poskytují informace o datu jména a přijetí pro zaměstnance Adventure Works Cycles. Zobrazení může být vytvořeno pro osobu, která má na starosti sledování pracovních výročí, ale bez toho, aby tato osoba získala přístup ke všem datům v těchto tabulkách.

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. Použití S ŠIFROVÁNÍM

Následující příklad používá WITH ENCRYPTION možnost a zobrazuje vypočítané sloupce, přejmenované sloupce a více sloupců.

Platí pro: SQL Server 2008 (10.0.x) a novější a 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. Použití FUNKCE CHECK OPTION

Následující příklad ukazuje zobrazení, dbo.SeattleOnly které odkazuje na pět tabulek a umožňuje úpravám dat použít pouze zaměstnance, kteří žijí v Seattlu.

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. Použití předdefinovaných funkcí v zobrazení

Následující příklad ukazuje definici zobrazení, která obsahuje integrovanou funkci. Při použití funkcí je nutné zadat název sloupce pro odvozený sloupec.

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. Použití dělených dat

Následující příklad používá tabulky s názvem SUPPLY1, SUPPLY2, SUPPLY3, a SUPPLY4. Tyto tabulky odpovídají tabulkám dodavatelů ze čtyř poboček umístěným v různých oblastech.

--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  

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

F. Vytvoření zobrazení spojením dvou tabulek

Následující příklad vytvoří zobrazení pomocí SELECT příkazu s .OUTER JOIN Výsledky dotazu spojení naplní zobrazení.

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);