Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Hiermee maakt u een virtuele tabel waarvan de inhoud (kolommen en rijen) door een query wordt gedefinieerd. Gebruik deze instructie om een weergave van de gegevens in een of meer tabellen in de database te maken. Een weergave kan bijvoorbeeld worden gebruikt voor de volgende doeleinden:
Om de aandacht te vestigen, te vereenvoudigen en de perceptie aan te passen die elke gebruiker van de database heeft.
Als een beveiligingsmechanisme door gebruikers toegang te geven tot gegevens via de weergave, zonder de gebruikers machtigingen te verlenen om rechtstreeks toegang te krijgen tot de onderliggende basistabellen.
Om een achterwaarts compatibele interface te bieden voor het emuleren van een tabel waarvan het schema is gewijzigd.
Transact-SQL syntaxis-conventies
Syntax
Syntaxis voor SQL Server en 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 ]
}
Syntaxis voor Azure Synapse Analytics en 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>
Syntaxis voor Microsoft Fabric Data Warehouse en SQL-analyse-eindpunt.
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
OR ALTER
Van toepassing op: Azure SQL Database en SQL Server (te beginnen met SQL Server 2016 (13.x) SP1).
Wijzigt de weergave alleen voorwaardelijk als deze al bestaat.
schema_name
Is de naam van het schema waartoe de weergave behoort.
view_name
Is de naam van de weergave. Weergavenamen moeten de regels voor id's volgen. Het opgeven van de naam van de weergave-eigenaar is optioneel.
column
Is de naam die moet worden gebruikt voor een kolom in een weergave. Een kolomnaam is alleen vereist wanneer een kolom wordt afgeleid van een rekenkundige expressie, een functie of een constante; wanneer twee of meer kolommen anders dezelfde naam hebben, meestal vanwege een join; of wanneer een kolom in een weergave een andere naam heeft dan die van de kolom waaruit deze wordt afgeleid. Kolomnamen kunnen ook worden toegewezen in de SELECT
instructie.
Als de kolom niet is opgegeven, krijgen de weergavekolommen dezelfde namen als de kolommen in de SELECT
instructie.
Note
In de kolommen voor de weergave zijn de machtigingen voor een kolomnaam van toepassing op een CREATE VIEW
of ALTER VIEW
instructie, ongeacht de bron van de onderliggende gegevens. Als bijvoorbeeld machtigingen worden verleend voor de SalesOrderID
kolom in een CREATE VIEW-instructie, kan een ALTER VIEW
instructie de SalesOrderID
kolom een andere kolomnaam geven, zoals OrderRef
, en nog steeds de machtigingen hebben die zijn gekoppeld aan de weergave met behulp van SalesOrderID
.
AS
Hiermee geeft u de acties op die de weergave moet uitvoeren.
select_statement
De SELECT
instructie waarmee de weergave wordt gedefinieerd. De instructie kan meer dan één tabel en andere weergaven gebruiken. De juiste machtigingen zijn vereist om te selecteren uit de objecten waarnaar wordt verwezen in de SELECT
component van de weergave die wordt gemaakt.
Een weergave hoeft geen subset van de rijen en kolommen van één bepaalde tabel te zijn. Er kan een weergave worden gemaakt die gebruikmaakt van meer dan één tabel of andere weergaven met een SELECT
component van elke complexiteit.
In een geïndexeerde weergavedefinitie moet de SELECT
instructie één tabelinstructie of een multitabel JOIN
met optionele aggregatie zijn.
De SELECT
componenten in een weergavedefinitie kunnen niet het volgende bevatten:
Een
ORDER BY
component, tenzij er ook eenTOP
component in de selectielijst van deSELECT
instructie staatImportant
De
ORDER BY
component wordt alleen gebruikt om de rijen te bepalen die worden geretourneerd door deTOP
ofOFFSET
component in de weergavedefinitie. DeORDER BY
component garandeert geen geordende resultaten wanneer de weergave wordt opgevraagd, tenzijORDER BY
deze ook is opgegeven in de query zelf.Het trefwoord
INTO
De
OPTION
componentEen verwijzing naar een tijdelijke tabel of een tabelvariabele.
Omdat select_statement de SELECT
instructie gebruikt, is het geldig om joinhints en tabelhints te gebruiken zoals opgegeven in de FROM
component. Zie FROM (Transact-SQL) en SELECT (Transact-SQL) voor meer informatie.
Functies en meerdere SELECT
instructies gescheiden door UNION
of UNION ALL
kunnen worden gebruikt in select_statement.
CHECK OPTION
Hiermee dwingt u alle instructies voor het wijzigen van gegevens af die voor de weergave worden uitgevoerd om de criteria te volgen die zijn ingesteld in select_statement. Wanneer een rij wordt gewijzigd via een weergave, zorgt u WITH CHECK OPTION
ervoor dat de gegevens zichtbaar blijven in de weergave nadat de wijziging is doorgevoerd.
Note
Dit CHECK OPTION
geldt alleen voor updates die via de weergave zijn gemaakt. Het heeft geen toepasselijkheid op updates die rechtstreeks worden uitgevoerd op de onderliggende tabellen van een weergave.
ENCRYPTION
van toepassing op: SQL Server 2008 (10.0.x) en hoger en Azure SQL Database.
Versleutelt de vermeldingen in sys.syscomments die de tekst van de CREATE VIEW
instructie bevatten. Hiermee WITH ENCRYPTION
voorkomt u dat de weergave wordt gepubliceerd als onderdeel van SQL Server-replicatie.
SCHEMABINDING
Hiermee wordt de weergave gekoppeld aan het schema van de onderliggende tabel of tabellen. Wanneer SCHEMABINDING
dit is opgegeven, kunnen de basistabel of -tabellen niet worden gewijzigd op een manier die van invloed is op de weergavedefinitie. De weergavedefinitie zelf moet eerst worden gewijzigd of verwijderd om afhankelijkheden te verwijderen van de tabel die moet worden gewijzigd. Wanneer u deze gebruikt SCHEMABINDING
, moet de select_statement de tweedelige namen (schema) bevatten.object) van tabellen, weergaven of door de gebruiker gedefinieerde functies waarnaar wordt verwezen. Alle objecten waarnaar wordt verwezen, moeten zich in dezelfde database bevinden.
Weergaven of tabellen die deelnemen aan een weergave die is gemaakt met de COMPONENT SCHEMABINDING, kunnen niet worden verwijderd, tenzij die weergave wordt verwijderd of gewijzigd, zodat deze geen schemabinding meer heeft. Anders genereert de database-engine een fout. Het uitvoeren van ALTER TABLE
instructies voor tabellen die deelnemen aan weergaven die schemabinding hebben, mislukken ook wanneer deze instructies van invloed zijn op de weergavedefinitie.
VIEW_METADATA
Hiermee geeft u op dat het exemplaar van SQL Server terugkeert naar de DB-Library, ODBC en OLE DB API's van de metagegevens over de weergave, in plaats van de basistabel of tabellen, wanneer metagegevens in de bladermodus worden aangevraagd voor een query die verwijst naar de weergave. Metagegevens in de bladermodus zijn aanvullende metagegevens die het exemplaar van SQL Server retourneert naar deze API's aan de clientzijde. Met deze metagegevens kunnen de API's aan de clientzijde updatable cursors aan de clientzijde implementeren. Metagegevens in de bladermodus bevatten informatie over de basistabel waartoe de kolommen in de resultatenset behoren.
Voor weergaven die zijn gemaakt met VIEW_METADATA
, retourneert de metagegevens in de bladermodus de naam van de weergave en niet de namen van de basistabel wanneer kolommen uit de weergave in de resultatenset worden beschreven.
Wanneer een weergave wordt gemaakt met behulp van WITH VIEW_METADATA
alle kolommen, met uitzondering van een tijdstempelkolom , kunnen deze worden bijgewerkt als de weergave wel INSTEAD OF INSERT
of INSTEAD OF UPDATE
niet wordt geactiveerd. Zie Opmerkingen voor meer informatie over bijwerkende weergaven.
Remarks
Een weergave kan alleen worden gemaakt in de huidige database. De CREATE VIEW
instructie moet de eerste instructie in een querybatch zijn. Een weergave kan maximaal 1024 kolommen bevatten.
Bij het uitvoeren van query's via een weergave controleert de database-engine of alle databaseobjecten waarnaar in de instructie wordt verwezen, bestaan en of deze geldig zijn in de context van de instructie en dat de instructies voor gegevenswijziging geen inbreuk maken op de regels voor gegevensintegriteit. Een controle die mislukt, retourneert een foutbericht. Met een geslaagde controle wordt de actie omgezet in een actie op basis van de onderliggende tabel of tabellen.
Als een weergave afhankelijk is van een tabel of weergave die is verwijderd, genereert de database-engine een foutbericht wanneer iemand probeert de weergave te gebruiken. Als er een nieuwe tabel of weergave wordt gemaakt en de tabelstructuur niet verandert van de vorige basistabel om de tabel te vervangen die is verwijderd, wordt de weergave opnieuw bruikbaar. Als de nieuwe tabel of weergavestructuur wordt gewijzigd, moet de weergave worden verwijderd en opnieuw worden gemaakt.
Als er geen weergave met de SCHEMABINDING
component wordt gemaakt, voert u sp_refreshview uit wanneer er wijzigingen worden aangebracht in de objecten onder de weergave die van invloed zijn op de definitie van de weergave. Anders kan de weergave onverwachte resultaten opleveren wanneer er een query wordt uitgevoerd.
Wanneer een weergave wordt gemaakt, wordt informatie over de weergave opgeslagen in de volgende catalogusweergaven: sys.views, sys.columns en sys.sql_expression_afhankelijkheden. De tekst van de CREATE VIEW
instructie wordt opgeslagen in de catalogusweergave sys.sql_modules .
Een query die gebruikmaakt van een index in een weergave die is gedefinieerd met numerieke of float-expressies , kan een resultaat hebben dat verschilt van een vergelijkbare query die niet gebruikmaakt van de index in de weergave. Dit verschil kan worden veroorzaakt door afrondingsfouten tijdens INSERT
, DELETE
of UPDATE
acties op onderliggende tabellen.
De database-engine slaat de instellingen op van SET QUOTED_IDENTIFIER
en SET ANSI_NULLS
wanneer er een weergave wordt gemaakt. Deze oorspronkelijke instellingen worden gebruikt om de weergave te parseren wanneer de weergave wordt gebruikt. Daarom hebben alle clientsessie-instellingen voor SET QUOTED_IDENTIFIER
en SET ANSI_NULLS
hebben geen invloed op de weergavedefinitie wanneer de weergave wordt geopend.
In Azure Synapse Analytics bieden weergaven geen ondersteuning voor schemabinding. Als er daarom wijzigingen worden aangebracht in de onderliggende objecten, moet u de weergave verwijderen en opnieuw maken om de onderliggende metagegevens te vernieuwen. Zie T-SQL-weergaven met toegewezen SQL-pool en serverloze SQL-pool in Azure Synapse Analytics voor meer informatie.
In Azure Synapse Analytics worden updatable weergaven, DML-triggers (van het type AFTER
of INSTEAD OF
) en gepartitioneerde weergaven niet ondersteund. Zie T-SQL-weergaven met toegewezen SQL-pool en serverloze SQL-pool in Azure Synapse Analytics voor meer informatie.
In Azure Synapse Analytics worden gepartitioneerde weergaven niet ondersteund. Zie T-SQL-weergaven met toegewezen SQL-pool en serverloze SQL-pool in Azure Synapse Analytics voor meer informatie.
In de Fabric SQL-database kunnen weergaven worden gemaakt, maar deze worden niet gespiegeld in de Fabric OneLake. Zie Beperkingen van sql-databasespiegeling voor infrastructuurresourcesvoor meer informatie.
Updatable views
U kunt de gegevens van een onderliggende basistabel wijzigen via een weergave, zolang aan de volgende voorwaarden wordt voldaan:
Alle wijzigingen, inclusief
UPDATE
,INSERT
enDELETE
instructies, moeten verwijzen naar kolommen uit slechts één basistabel.De kolommen die in de weergave worden gewijzigd, moeten rechtstreeks verwijzen naar de onderliggende gegevens in de tabelkolommen. De kolommen kunnen niet op een andere manier worden afgeleid, zoals via het volgende:
Een statistische functie:
AVG
, ,COUNT
SUM
, ,MIN
,MAX
,GROUPING
, ,STDEV
,STDEVP
, enVAR
VARP
.A computation. De kolom kan niet worden berekend vanuit een expressie die gebruikmaakt van andere kolommen. Kolommen die worden gevormd met behulp van de setoperator UNION, UNION ALL, CROSSJOIN, EXCEPT en INTERSECT zijn ook niet updatable.
De kolommen die worden gewijzigd, worden niet beïnvloed door
GROUP BY
,HAVING
ofDISTINCT
componenten.TOP wordt nergens in de select_statement van de weergave samen met de
WITH CHECK OPTION
component gebruikt.
De vorige beperkingen zijn van toepassing op subquery's in de FROM-component van de weergave, net zoals ze van toepassing zijn op de weergave zelf. Over het algemeen moet de database-engine ondubbelzinnig wijzigingen van de weergavedefinitie kunnen traceren naar één basistabel. Zie Gegevens wijzigen via een weergave-voor meer informatie.
Als de vorige beperkingen verhinderen dat u gegevens rechtstreeks via een weergave wijzigt, kunt u de volgende opties overwegen:
IN PLAATS VAN triggers
INSTEAD OF
triggers kunnen worden gemaakt in een weergave om een weergave updatable te maken. DeINSTEAD OF
trigger wordt uitgevoerd in plaats van de instructie voor het wijzigen van gegevens waarop de trigger is gedefinieerd. Met deze trigger kan de gebruiker de set acties opgeven die moeten gebeuren om de wijzigingsinstructie van gegevens te verwerken. Als er dus eenINSTEAD OF
trigger bestaat voor een weergave van een specifieke instructie voor het wijzigen van gegevens (INSERT
,UPDATE
ofDELETE
), kan de bijbehorende weergave worden bijgewerkt via die instructie. ZieINSTEAD OF
voor meer informatie over triggers.Partitioned views
Als de weergave een gepartitioneerde weergave is, kan de weergave worden bijgewerkt, afhankelijk van bepaalde beperkingen. Wanneer dit nodig is, onderscheidt de database-engine lokale gepartitioneerde weergaven als de weergaven waarin alle deelnemende tabellen en de weergave zich op hetzelfde exemplaar van SQL Server bevinden en gedistribueerde gepartitioneerde weergaven als de weergaven waarin ten minste één van de tabellen in de weergave zich op een andere of externe server bevindt.
Partitioned views
Een gepartitioneerde weergave is een weergave die wordt gedefinieerd door lidtabellen UNION ALL
die op dezelfde manier zijn gestructureerd, maar afzonderlijk zijn opgeslagen als meerdere tabellen in hetzelfde exemplaar van SQL Server of in een groep autonome exemplaren van SQL Server-servers, federatieve databaseservers genoemd.
Note
De voorkeursmethode voor het partitioneren van gegevens lokaal naar één server is via gepartitioneerde tabellen. Zie Gepartitioneerde tabellen en indexenvoor meer informatie.
Wanneer u een partitioneringsschema ontwerpt, moet het duidelijk zijn welke gegevens bij elke partitie horen. De gegevens voor de Customers
tabel worden bijvoorbeeld gedistribueerd in drie lidtabellen op drie serverlocaties: Customers_33
op Server1
, Customers_66
op Server2
en Customers_99
op Server3
.
Er wordt een gepartitioneerde weergave Server1
op de volgende manier gedefinieerd:
--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;
Over het algemeen wordt gezegd dat een weergave een gepartitioneerde weergave is als deze van het volgende formulier is:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn;
Voorwaarden voor het maken van gepartitioneerde weergaven
De selectie
list
Selecteer in de kolomlijst van de weergavedefinitie alle kolommen in de lidtabellen.
Zorg ervoor dat de kolommen in dezelfde rangschikkingspositie van elk
select list
van hetzelfde type zijn, inclusief sorteringen. Het is niet voldoende voor de kolommen om impliciet converteerbare typen te zijn, zoals over het algemeen het gevalUNION
is.Bovendien moet ten minste één kolom (bijvoorbeeld
<col>
) worden weergegeven in alle geselecteerde lijsten in dezelfde rangschikkenpositie. Definieer<col>
op een manier waarop de lidtabellenT1, ..., Tn
respectievelijk CHECK-beperkingenC1, ..., Cn
hebben gedefinieerd<col>
.C1
De beperking die voor de tabelT1
is gedefinieerd, moet van het volgende formulier zijn: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 >
De beperkingen moeten zodanig zijn dat elke opgegeven waarde
<col>
kan voldoen aan een van de beperkingenC1, ..., Cn
, zodat de beperkingen een set niet-aaneengesloten of niet-aaneengesloten intervallen vormen. De kolom<col>
waarop de niet-aaneengesloten beperkingen worden gedefinieerd, wordt de partitioneringskolom genoemd. De partitioneringskolom kan verschillende namen hebben in de onderliggende tabellen. De beperkingen moeten een ingeschakelde en vertrouwde status hebben om te voldoen aan de eerder genoemde voorwaarden van de partitioneringskolom. Als de beperkingen zijn uitgeschakeld, schakelt u beperkingscontrole opnieuw in met behulp van deCHECK CONSTRAINT *constraint_name*
optie vanALTER TABLE
en gebruikt u deWITH CHECK
optie om deze te valideren.In de volgende voorbeelden ziet u geldige sets beperkingen:
{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
Dezelfde kolom kan niet meerdere keren worden gebruikt in de selectielijst.
Partitioning column
De partitioneringskolom maakt deel uit van de PRIMAIRE SLEUTEL van de tabel.
Het kan geen berekende kolom, identiteit, standaard of tijdstempel zijn.
Als er meer dan één beperking is op dezelfde kolom in een lidtabel, negeert de database-engine alle beperkingen en houdt deze niet in overweging bij het bepalen of de weergave een gepartitioneerde weergave is. Als u wilt voldoen aan de voorwaarden van de gepartitioneerde weergave, moet u ervoor zorgen dat er slechts één partitioneringsbeperking is voor de partitioneringskolom.
Er gelden geen beperkingen voor de updatability van de partitioneringskolom.
Lidtabellen of onderliggende tabellen
T1, ..., Tn
De tabellen kunnen lokale tabellen of tabellen zijn van andere computers waarop SQL Server wordt uitgevoerd waarnaar wordt verwezen via een vierdelige naam of een op OPENDATASOURCE- of OPENROWSET gebaseerde naam. De syntaxis VAN OPENDATASOURCE en OPENROWSET kan een tabelnaam opgeven, maar geen passthrough-query. Zie OPENDATASOURCE (Transact-SQL) en OPENROWSET (Transact-SQL) voor meer informatie.
Als een of meer lidtabellen extern zijn, wordt de weergave gedistribueerde gepartitioneerde weergave genoemd en zijn aanvullende voorwaarden van toepassing. Ze worden verderop in deze sectie beschreven.
Dezelfde tabel kan niet twee keer worden weergegeven in de set tabellen die worden gecombineerd met de
UNION ALL
instructie.De lidtabellen kunnen geen indexen bevatten die zijn gemaakt op berekende kolommen in de tabel.
De lidtabellen hebben alle beperkingen voor PRIMAIRE SLEUTEL voor hetzelfde aantal kolommen.
Alle lidtabellen in de weergave hebben dezelfde ANSI-opvullingsinstelling. Dit kan worden ingesteld met behulp van de optie gebruikersopties in
sp_configure
of de SET-instructie.
Voorwaarden voor het wijzigen van gegevens in gepartitioneerde weergaven
De volgende beperkingen gelden voor instructies waarmee gegevens in gepartitioneerde weergaven worden gewijzigd:
De
INSERT
instructie levert waarden voor alle kolommen in de weergave, zelfs als de onderliggende lidtabellen eenDEFAULT
beperking hebben voor deze kolommen of als ze waarden toestaanNULL
. Voor die lidtabelkolommen metDEFAULT
definities kunnen de instructies het trefwoordDEFAULT
niet expliciet gebruiken.De waarde die in de partitioneringskolom wordt ingevoegd, voldoet aan ten minste één van de onderliggende beperkingen; anders mislukt de invoegactie met een schending van een beperking.
UPDATE
instructies kunnen hetDEFAULT
trefwoord niet opgeven als een waarde in deSET
component, zelfs als de kolom eenDEFAULT
waarde heeft die is gedefinieerd in de bijbehorende lidtabel.Kolommen in de weergave die een identiteitskolom in een of meer lidtabellen zijn, kunnen niet worden gewijzigd met behulp van een
INSERT
ofUPDATE
meer instructies.Als een van de lidtabellen een tijdstempelkolom bevat, kunnen de gegevens niet worden gewijzigd met behulp van een
INSERT
ofUPDATE
meer instructies.Als een van de lidtabellen een trigger of een
ON UPDATE CASCADE/SET NULL/SET DEFAULT
beperkingON DELETE CASCADE/SET NULL/SET DEFAULT
bevat, kan de weergave niet worden gewijzigd.INSERT
,UPDATE
enDELETE
acties voor een gepartitioneerde weergave zijn niet toegestaan als er een self-join is met dezelfde weergave of met een van de lidtabellen in de instructie.Het bulksgewijs importeren van gegevens in een gepartitioneerde weergave wordt niet ondersteund door
bcp
of instructiesBULK INSERT
INSERT ... SELECT * FROM OPENROWSET(BULK...)
. U kunt echter meerdere rijen invoegen in een gepartitioneerde weergave met behulp van de INSERT-instructie .Note
Als u een gepartitioneerde weergave wilt bijwerken, moet de gebruiker over en
INSERT
UPDATE
machtigingen voor de lidtabellen beschikkenDELETE
.
Aanvullende voorwaarden voor gedistribueerde gepartitioneerde weergaven
Voor gedistribueerde gepartitioneerde weergaven (wanneer een of meer lidtabellen extern zijn), zijn de volgende aanvullende voorwaarden van toepassing:
Een gedistribueerde transactie wordt gestart om atomiciteit te garanderen op alle knooppunten die worden beïnvloed door de update.
Stel de
XACT_ABORT SET
optie in op voorON
INSERT
,UPDATE
ofDELETE
instructies om te werken.Kolommen in externe tabellen van het type smallmoney waarnaar wordt verwezen in een gepartitioneerde weergave, worden toegewezen als geld. Daarom moeten de bijbehorende kolommen (in dezelfde rangschikkelijke positie in de selectielijst) in de lokale tabellen ook van het type geld zijn.
Onder databasecompatibiliteitsniveau 110 en hoger worden kolommen in externe tabellen van het type smalldatetime waarnaar wordt verwezen in een gepartitioneerde weergave toegewezen als smalldatetime. Overeenkomende kolommen (in dezelfde rangschikkpositie in de selectielijst) in de lokale tabellen moeten smalldatetime zijn. Dit is een wijziging in het gedrag van eerdere versies van SQL Server waarin kolommen in externe tabellen van het type smalldatetime waarnaar wordt verwezen in een gepartitioneerde weergave worden toegewezen als datum/tijd en de bijbehorende kolommen in lokale tabellen van het type datum/tijd moeten zijn. Zie ALTER DATABASE Compatibility Level (Transact-SQL)voor meer informatie.
Een gekoppelde server in de gepartitioneerde weergave kan geen gekoppelde loopbackserver zijn. Dit is een gekoppelde server die verwijst naar hetzelfde exemplaar van SQL Server.
De instelling van de SET ROWCOUNT
optie wordt genegeerd voor INSERT
, UPDATE
en DELETE
acties waarbij gepartitioneerde weergaven en externe tabellen kunnen worden bijgewerkt.
Wanneer de lidtabellen en de definitie van de gepartitioneerde weergave aanwezig zijn, bouwt de SQL Server-queryoptimalisatie intelligente plannen die efficiënt gebruikmaken van query's om toegang te krijgen tot gegevens uit lidtabellen. Met de CHECK
beperkingsdefinities wijst de queryprocessor de distributie van sleutelwaarden toe aan de lidtabellen. Wanneer een gebruiker een query uitgeeft, vergelijkt de queryprocessor de toewijzing met de waarden die zijn opgegeven in de WHERE
component en bouwt een uitvoeringsplan met een minimale hoeveelheid gegevensoverdracht tussen lidservers. Als sommige lidtabellen zich op externe servers bevinden, worden gedistribueerde query's door het exemplaar van SQL Server omgezet, zodat de hoeveelheid gedistribueerde gegevens die moeten worden overgedragen minimaal is.
Overwegingen voor replicatie
Als u gepartitioneerde weergaven wilt maken voor lidtabellen die betrokken zijn bij replicatie, zijn de volgende overwegingen van toepassing:
Als de onderliggende tabellen betrokken zijn bij het samenvoegen van replicatie of transactionele replicatie met het bijwerken van abonnementen, moet u ervoor zorgen dat de kolom uniqueidentifier ook wordt opgenomen in de selectielijst.
Acties
INSERT
in de gepartitioneerde weergave moeten eenNEWID()
waarde voor de kolom uniqueidentifier opgeven. Update-acties op basis van de kolom uniqueidentifier moeten worden opgegevenNEWID()
als de waarde, omdat het trefwoord DEFAULT niet kan worden gebruikt.De replicatie van updates die met behulp van de weergave worden gemaakt, is hetzelfde als wanneer tabellen in twee verschillende databases worden gerepliceerd: de tabellen worden geleverd door verschillende replicatieagents en de volgorde van de updates wordt niet gegarandeerd.
Permissions
Vereist de machtiging CREATE VIEW in de database en ALTER-machtiging voor het schema waarin de weergave wordt gemaakt.
Examples
In de volgende voorbeelden wordt de AdventureWorks2022
of AdventureWorksDW2022
database gebruikt.
A. CREATE VIEW gebruiken om een weergave te maken
In het volgende voorbeeld wordt een weergave gemaakt met behulp van een SELECT
instructie. Een eenvoudige weergave is handig wanneer een combinatie van kolommen vaak wordt opgevraagd. De gegevens uit deze weergave zijn afkomstig uit de HumanResources.Employee
tabellen Person.Person
van de AdventureWorks2022-database. De gegevens bevatten informatie over naam- en huurdatums voor de werknemers van Adventure Works Cycles. De weergave kan worden gemaakt voor de persoon die verantwoordelijk is voor het bijhouden van zakelijke verjaardagen, maar zonder deze persoon toegang te geven tot alle gegevens in deze tabellen.
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. GEBRUIKEN MET VERSLEUTELING
In het volgende voorbeeld wordt de WITH ENCRYPTION
optie gebruikt en worden berekende kolommen, hernoemde kolommen en meerdere kolommen weergegeven.
Van toepassing op: SQL Server 2008 (10.0.x) en hoger en 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. GEBRUIK MET DE OPTIE CONTROLEREN
In het volgende voorbeeld ziet u een weergave met de naam dbo.SeattleOnly
vijf tabellen en kunnen gegevenswijzigingen alleen van toepassing zijn op werknemers die in Seattle wonen.
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. Ingebouwde functies in een weergave gebruiken
In het volgende voorbeeld ziet u een weergavedefinitie met een ingebouwde functie. Wanneer u functies gebruikt, moet u een kolomnaam opgeven voor de afgeleide kolom.
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. Gepartitioneerde gegevens gebruiken
In het volgende voorbeeld worden tabellen met de naam SUPPLY1
, SUPPLY2
, SUPPLY3
en SUPPLY4
. Deze tabellen komen overeen met de leverancierstabellen van vier kantoren, gelegen in verschillende regio's.
--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
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
F. Een weergave maken door twee tabellen samen te voegen
In het volgende voorbeeld wordt een weergave gemaakt met behulp van een SELECT
instructie met een OUTER JOIN
. De resultaten van de joinquery vullen de weergave.
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);
Related content
- ALTER TABLE (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- Een opgeslagen procedure maken
- 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)