Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
koncový bod SQL Analytics ve službě Microsoft Fabric
Warehouse v Microsoft Fabric
databá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.
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 OrderRef
a 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:
Klauzule
ORDER BY
, pokud není v seznamu select příkazuTOP
aniSELECT
klauzuleDůležité
Klauzule
ORDER BY
slouží pouze k určení řádků vrácenýchTOP
klauzulí neboOFFSET
klauzulí v definici zobrazení. KlauzuleORDER BY
nezaručuje seřazené výsledky při dotazování, pokudORDER 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í SCHEMABINDING
musí 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_METADATA
metadat 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
, DELETE
nebo 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ě
UPDATE
INSERT
, aDELETE
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: , , ,
AVG
COUNT
SUM
MIN
MAX
,GROUPING
,STDEV
, a .STDEVP
VAR
VARP
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 BY
klauzulí ,HAVING
aniDISTINCT
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. TriggerINSTEAD 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íhoINSTEAD OF
příkazu pro úpravu dat (INSERT
UPDATE
, neboDELETE
), odpovídající zobrazení je možné aktualizovat prostřednictvím tohoto příkazu. Další informace o aktivačních událostech najdete vINSTEAD 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 Server2
a 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í
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í proUNION
.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é tabulkyT1, ..., Tn
měly definovaná omezeníC1, ..., Cn
CHECK v<col>
uvedeném pořadí.C1
Omezení definované v tabulceT1
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žnostiALTER TABLE
a 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.
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í.
Č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é tabulkyDEFAULT
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é slovoDEFAULT
.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 zadatDEFAULT
klíčové slovo jako hodnotu vSET
klauzuli, i když sloupec má hodnotu definovanouDEFAULT
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 neboUPDATE
příkazu.Pokud jedna z tabulek členů obsahuje sloupec časového razítka , nelze data změnit pomocí
INSERT
příkazu neboUPDATE
příkazu.Pokud jedna z členských tabulek obsahuje aktivační událost nebo
ON UPDATE CASCADE/SET NULL/SET DEFAULT
ON DELETE CASCADE/SET NULL/SET DEFAULT
omezení, nelze zobrazení upravit.INSERT
,UPDATE
aDELETE
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ů neboBULK INSERT
INSERT ... 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
INSERT
UPDATE
uživatel oprávnění aDELETE
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 proON
INSERT
,UPDATE
neboDELETE
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 INSERT
UPDATE
, 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í obsahovatNEWID()
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);
Související obsah
- ALTER TABLE (Transact-SQL)
- ZMĚNIT ZOBRAZENÍ (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- vytvoření uložené procedury
- 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)