Dela via


SKAPA VY (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft FabricSQL-databas i Microsoft Fabric

Skapar en virtuell tabell vars innehåll (kolumner och rader) definieras av en fråga. Använd den här instruktionen för att skapa en vy över data i en eller flera tabeller i databasen. En vy kan till exempel användas i följande syften:

  • För att fokusera, förenkla och anpassa den uppfattning som varje användare har av databasen.

  • Som en säkerhetsmekanism genom att tillåta användare att komma åt data via vyn, utan att ge användarna behörighet att komma åt de underliggande bastabellerna direkt.

  • För att tillhandahålla ett bakåtkompatibelt gränssnitt för att emulera en tabell vars schema har ändrats.

Transact-SQL syntaxkonventioner

Syntax

Syntax för SQL Server och 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 ]
}

Syntax för Azure Synapse Analytics och 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>  

Syntax för Microsoft Fabric Data Warehouse och SQL-analysslutpunkt.

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>  

Argumentpunkter

ELLER ÄNDRA

Gäller för: Azure SQL Database och SQL Server (från och med SQL Server 2016 (13.x) SP1).

Villkorligt ändrar vyn endast om den redan finns.

schema_name
Är namnet på schemat som vyn tillhör.

view_name
Är namnet på vyn. Visningsnamn måste följa reglerna för identifierare. Det är valfritt att ange visningsägarens namn.

kolumn
Är namnet som ska användas för en kolumn i en vy. Ett kolumnnamn krävs endast när en kolumn härleds från ett aritmetiskt uttryck, en funktion eller en konstant. när två eller flera kolumner annars kan ha samma namn, vanligtvis på grund av en koppling; eller när en kolumn i en vy anges ett annat namn än det för kolumnen som den härleds från. Kolumnnamn kan också tilldelas i -instruktionen SELECT .

Om kolumnen inte har angetts får vykolumnerna samma namn som kolumnerna i -instruktionen SELECT .

Anmärkning

I kolumnerna för vyn gäller behörigheterna för ett kolumnnamn i en CREATE VIEW eller ALTER VIEW -instruktionen, oavsett källan till underliggande data. Om behörigheter till exempel beviljas för SalesOrderID kolumnen i en CREATE VIEW-instruktion kan en ALTER VIEW -instruktion namnge SalesOrderID kolumnen med ett annat kolumnnamn, till exempel , och fortfarande ha de behörigheter som OrderRefär associerade med vyn med hjälp av SalesOrderID.

SOM

Anger vilka åtgärder vyn ska utföra.

select_statement

Instruktionen SELECT som definierar vyn. Instruktionen kan använda mer än en tabell och andra vyer. Lämpliga behörigheter krävs för att välja från de objekt som refereras i satsen i SELECT vyn som skapas.

En vy behöver inte vara en delmängd av raderna och kolumnerna i en viss tabell. En vy kan skapas som använder mer än en tabell eller andra vyer med en SELECT sats av någon komplexitet.

I en indexerad vydefinition måste -instruktionen SELECT vara en enda tabell-instruktion eller en multitable JOIN med valfri aggregering.

SELECT Satserna i en vydefinition kan inte innehålla:

  • En ORDER BY sats, såvida det inte också finns en TOP sats i instruktionens SELECT urvalslista

    Viktigt!

    Satsen ORDER BY används endast för att fastställa de rader som returneras av TOP satsen eller OFFSET i vydefinitionen. ORDER BY Satsen garanterar inte ordnade resultat när vyn efterfrågas, såvida inte ORDER BY också anges i själva frågan.

  • Nyckelordet INTO

  • Satsen OPTION

  • En referens till en tillfällig tabell eller en tabellvariabel.

Eftersom select_statement använder -instruktionen SELECT är det giltigt att använda kopplingstips och tabelltips enligt FROM satsen. Mer information finns i FROM (Transact-SQL) och SELECT (Transact-SQL).

Funktioner och flera SELECT instruktioner avgränsade med UNION eller UNION ALL kan användas i select_statement.

ALTERNATIVET KONTROLLERA

Tvingar alla datamodifieringsinstruktioner som körs mot vyn att följa kriterierna som anges i select_statement. När en rad ändras via en vy WITH CHECK OPTION ser du till att data förblir synliga i vyn efter att ändringen har checkats in.

Anmärkning

Det CHECK OPTION gäller endast uppdateringar som görs via vyn. Den har ingen tillämplighet för uppdateringar som utförs direkt till en vys underliggande tabeller.

KRYPTERING

gäller för: SQL Server 2008 (10.0.x) och senare och Azure SQL Database.

Krypterar posterna i sys.syscomments som innehåller instruktionens CREATE VIEW text. Med hjälp WITH ENCRYPTION av förhindras att vyn publiceras som en del av SQL Server-replikering.

SCHEMABINDNING

Binder vyn till schemat för den underliggande tabellen eller tabellerna. När SCHEMABINDING har angetts kan inte bastabellen eller tabellerna ändras på ett sätt som påverkar vydefinitionen. Själva vydefinitionen måste först ändras eller tas bort för att ta bort beroenden i tabellen som ska ändras. När du använder SCHEMABINDINGmåste select_statement innehålla namnen i två delar (schema.objekt) med tabeller, vyer eller användardefinierade funktioner som refereras till. Alla refererade objekt måste finnas i samma databas.

Vyer eller tabeller som deltar i en vy som skapats med SCHEMABINDING-satsen kan inte tas bort om inte vyn tas bort eller ändras så att den inte längre har schemabindning. Annars genererar databasmotorn ett fel. Dessutom misslyckas körningen av instruktioner på tabeller som deltar i vyer som har schemabindning ALTER TABLE när dessa instruktioner påverkar vydefinitionen.

VIEW_METADATA

Anger att instansen av SQL Server ska återgå till API:erna DB-Library, ODBC och OLE DB metadatainformationen om vyn, i stället för bastabellen eller tabellerna, när metadata i bågläge begärs för en fråga som refererar till vyn. Metadata i bläddra-läge är ytterligare metadata som SQL Server-instansen returnerar till dessa API:er på klientsidan. Med dessa metadata kan API:er på klientsidan implementera uppdaterade markörer på klientsidan. Metadata i bläddra-läge innehåller information om bastabellen som kolumnerna i resultatuppsättningen tillhör.

För vyer som skapats med VIEW_METADATAreturnerar metadata i bläddra-läge visningsnamnet och inte bastabellnamnen när de beskriver kolumner från vyn i resultatuppsättningen.

När en vy skapas med hjälp WITH VIEW_METADATAav är alla dess kolumner, förutom en tidsstämpelkolumn , uppdaterbara om vyn har INSTEAD OF INSERT eller INSTEAD OF UPDATE utlöser. Mer information om uppdateringsbara vyer finns i Kommentarer.

Anmärkningar

En vy kan bara skapas i den aktuella databasen. Måste CREATE VIEW vara den första instruktionen i en frågebatch. En vy kan ha högst 1 024 kolumner.

När du frågar via en vy kontrollerar databasmotorn att alla databasobjekt som refereras var som helst i -instruktionen finns och att de är giltiga i kontexten för -instruktionen, och att datamodifieringsinstruktioner inte bryter mot några regler för dataintegritet. En kontroll som misslyckas returnerar ett felmeddelande. En lyckad kontroll översätter åtgärden till en åtgärd mot den underliggande tabellen eller tabellerna.

Om en vy är beroende av en tabell eller vy som har tagits bort skapar databasmotorn ett felmeddelande när någon försöker använda vyn. Om en ny tabell eller vy skapas och tabellstrukturen inte ändras från den tidigare bastabellen för att ersätta den borttagna, blir vyn användbar igen. Om den nya tabellen eller vystrukturen ändras måste vyn tas bort och skapas på nytt.

Om en vy inte skapas med SCHEMABINDING -satsen kör du sp_refreshview när ändringar görs i objekten som ligger bakom vyn som påverkar definitionen av vyn. Annars kan vyn ge oväntade resultat när den efterfrågas.

När en vy skapas lagras information om vyn i följande katalogvyer: sys.views, sys.columns och sys.sql_expression_dependencies. Texten i instruktionen CREATE VIEW lagras i katalogvyn sys.sql_modules .

En fråga som använder ett index i en vy som definierats med numeriska uttryck eller flyttaluttryck kan ha ett resultat som skiljer sig från en liknande fråga som inte använder indexet i vyn. Den här skillnaden kan orsakas av avrundningsfel under INSERT, DELETEeller UPDATE åtgärder i underliggande tabeller.

Databasmotorn sparar inställningarna SET QUOTED_IDENTIFIER för och SET ANSI_NULLS när en vy skapas. De här ursprungliga inställningarna används för att parsa vyn när vyn används. Därför påverkar alla klientsessionsinställningar för SET QUOTED_IDENTIFIER och SET ANSI_NULLS inte vydefinitionen när vyn används.

I Azure Synapse Analytics stöder vyer inte schemabindning. Om ändringar görs i de underliggande objekten bör du därför släppa och återskapa vyn för att uppdatera underliggande metadata. Mer information finns i T-SQL-vyer med dedikerad SQL-pool och serverlös SQL-pool i Azure Synapse Analytics.

I Azure Synapse Analytics stöds inte uppdateringsbara vyer, DML-utlösare (av typen AFTER eller INSTEAD OF) och partitionerade vyer. Mer information finns i T-SQL-vyer med dedikerad SQL-pool och serverlös SQL-pool i Azure Synapse Analytics.

Partitionerade vyer stöds inte i Azure Synapse Analytics. Mer information finns i T-SQL-vyer med dedikerad SQL-pool och serverlös SQL-pool i Azure Synapse Analytics.

I Fabric SQL-databasen kan vyer skapas, men de speglas inte i Fabric OneLake. Mer information finns i begränsningar för sql-databasspegling av infrastrukturresurser.

Uppdateringsbara vyer

Du kan ändra data i en underliggande bastabell genom en vy, så länge följande villkor är uppfyllda:

  • Alla ändringar, inklusive UPDATE, INSERToch DELETE -instruktioner, måste referera till kolumner från endast en bastabell.

  • De kolumner som ändras i vyn måste referera direkt till underliggande data i tabellkolumnerna. Kolumnerna kan inte härledas på något annat sätt, till exempel genom följande:

    • En mängdfunktion: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, , VARoch VARP.

    • En beräkning. Det går inte att beräkna kolumnen från ett uttryck som använder andra kolumner. Kolumner som bildas med hjälp av de angivna operatorerna UNION, UNION ALL, CROSSJOIN, EXCEPT och INTERSECT motsvarar en beräkning och är inte heller uppdaterbara.

  • De kolumner som ändras påverkas inte av GROUP BY, HAVINGeller DISTINCT -satser.

  • TOP används inte någonstans i select_statement i vyn tillsammans med WITH CHECK OPTION -satsen.

De tidigare begränsningarna gäller för alla underfrågor i FROM-satsen i vyn, precis som de gäller för själva vyn. I allmänhet måste databasmotorn entydigt kunna spåra ändringar från vydefinitionen till en bastabell. Mer information finns i Ändra data via en vy.

Om de tidigare begränsningarna hindrar dig från att ändra data direkt via en vy bör du överväga följande alternativ:

  • I STÄLLET för utlösare

    INSTEAD OF utlösare kan skapas i en vy för att göra en vy uppdaterad. Utlösaren INSTEAD OF körs i stället för instruktionen för dataändring som utlösaren har definierats för. Med den här utlösaren kan användaren ange den uppsättning åtgärder som måste utföras för att bearbeta instruktionen för dataändring. Om det därför finns en INSTEAD OF utlösare för en vy på en specifik datamodifieringssats (INSERT, UPDATE, eller DELETE) är motsvarande vy uppdaterbar via den instruktionen. Mer information om INSTEAD OF utlösare finns i DML-utlösare.

  • Partitionerade vyer

    Om vyn är en partitionerad vy är vyn uppdaterad, med vissa begränsningar. När det behövs särskiljer databasmotorn lokala partitionerade vyer som de vyer där alla deltagande tabeller och vyn finns på samma instans av SQL Server och distribuerade partitionerade vyer som de vyer där minst en av tabellerna i vyn finns på en annan eller fjärransluten server.

Partitionerade vyer

En partitionerad vy är en vy som definieras av en UNION ALL medlemstabell som är strukturerad på samma sätt, men som lagras separat som flera tabeller i antingen samma instans av SQL Server eller i en grupp autonoma instanser av SQL Server-servrar, som kallas federerade databasservrar.

Anmärkning

Den bästa metoden för att partitionera data lokalt till en server är via partitionerade tabeller. Mer information finns i partitionerade tabeller och index.

När du utformar ett partitioneringsschema måste det vara tydligt vilka data som tillhör varje partition. Till exempel distribueras data för Customers tabellen i tre medlemstabeller på tre serverplatser: Customers_33Server1, Customers_66Server2och Customers_99Server3.

En partitionerad vy på definieras på Server1 följande sätt:

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

I allmänhet sägs en vy vara en partitionerad vy om den är av följande formulär:

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

Villkor för att skapa partitionerade vyer

  1. Välj list

    • I kolumnlistan för vydefinitionen väljer du alla kolumner i medlemstabellerna.

    • Se till att kolumnerna i samma ordningsposition för var och en select list är av samma typ, inklusive sortering. Det räcker inte att kolumnerna är implicit konvertibla typer, vilket vanligtvis är fallet för UNION.

      Dessutom måste minst en kolumn (till exempel <col>) visas i alla markeringslistor i samma ordningstal. Definiera <col> på ett sätt som medlemstabellerna T1, ..., Tn har CHECK-begränsningar C1, ..., Cn definierade på <col>, respektive.

      Villkoret C1 som definieras i tabellen T1 måste vara av följande formulär:

      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 >  
      
    • Begränsningarna måste vara på ett sådant sätt att alla angivna värden <col> för högst kan uppfylla en av begränsningarna C1, ..., Cn så att begränsningarna utgör en uppsättning uppdelade intervall eller icke-överlappande intervall. <col> Kolumnen där de uppdelade begränsningarna definieras kallas för partitioneringskolumnen. Partitioneringskolumnen kan ha olika namn i de underliggande tabellerna. Begränsningarna måste vara i ett aktiverat och betrott tillstånd för att de ska kunna uppfylla de tidigare nämnda villkoren i partitioneringskolumnen. Om begränsningarna är inaktiverade aktiverar du begränsningskontrollen igen med hjälp CHECK CONSTRAINT *constraint_name* av ALTER TABLEalternativet och använder WITH CHECK alternativet för att verifiera dem.

      I följande exempel visas giltiga uppsättningar med begränsningar:

      { [col < 10], [col between 11 and 20] , [col > 20] }  
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }  
      
    • Samma kolumn kan inte användas flera gånger i urvalslistan.

  2. Partitioneringskolumn

    • Partitioneringskolumnen är en del av tabellens PRIMÄRNYCKEL.

    • Det kan inte vara en kolumn för beräkning, identitet, standard eller tidsstämpel .

    • Om det finns mer än en begränsning för samma kolumn i en medlemstabell ignorerar databasmotorn alla begränsningar och tar inte hänsyn till dem när du avgör om vyn är en partitionerad vy. Om du vill uppfylla villkoren för den partitionerade vyn kontrollerar du att det bara finns en partitioneringsbegränsning för partitioneringskolumnen.

    • Det finns inga begränsningar för uppdatbarheten för partitioneringskolumnen.

  3. Medlemstabeller eller underliggande tabeller T1, ..., Tn

    • Tabellerna kan vara antingen lokala tabeller eller tabeller från andra datorer som kör SQL Server som refereras antingen via ett namn i fyra delar eller ett OPENDATASOURCE- eller OPENROWSET-baserat namn. Syntaxen OPENDATASOURCE och OPENROWSET kan ange ett tabellnamn, men inte en direktfråga. Mer information finns i OPENDATASOURCE (Transact-SQL) och OPENROWSET (Transact-SQL).

      Om en eller flera av medlemstabellerna är fjärranslutna kallas vyn distribuerad partitionerad vy och ytterligare villkor gäller. De beskrivs senare i det här avsnittet.

    • Samma tabell kan inte visas två gånger i den uppsättning tabeller som kombineras med -instruktionen UNION ALL .

    • Medlemstabellerna kan inte ha index som skapats på beräknade kolumner i tabellen.

    • Medlemstabellerna har alla PRIMARY KEY-begränsningar för samma antal kolumner.

    • Alla medlemstabeller i vyn har samma ANSI-utfyllnadsinställning. Detta kan anges med hjälp av antingen alternativet användaralternativ i sp_configure eller SET-instruktionen.

Villkor för att ändra data i partitionerade vyer

Följande begränsningar gäller för instruktioner som ändrar data i partitionerade vyer:

  • Instruktionen INSERT tillhandahåller värden för alla kolumner i vyn, även om de underliggande medlemstabellerna har en DEFAULT begränsning för dessa kolumner eller om de tillåter NULL värden. För de medlemstabellkolumner som har DEFAULT definitioner kan inte uttrycken uttryckligen använda nyckelordet DEFAULT.

  • Värdet som infogas i partitioneringskolumnen uppfyller minst en av de underliggande begränsningarna. annars misslyckas infogningsåtgärden med en begränsningsöverträdelse.

  • UPDATE -instruktioner kan inte ange nyckelordet DEFAULT som ett värde i SET -satsen, även om kolumnen har ett DEFAULT värde som definierats i motsvarande medlemstabell.

  • Kolumner i vyn som är en identitetskolumn i en eller flera av medlemstabellerna kan inte ändras med hjälp av en INSERT -instruktion UPDATE .

  • Om en av medlemstabellerna innehåller en tidsstämpelkolumn kan data inte ändras med hjälp av en INSERT -instruktion UPDATE .

  • Om en av medlemstabellerna innehåller en utlösare eller en eller ON UPDATE CASCADE/SET NULL/SET DEFAULT ett ON DELETE CASCADE/SET NULL/SET DEFAULT villkor kan vyn inte ändras.

  • INSERT, UPDATE, och DELETE åtgärder mot en partitionerad vy tillåts inte om det finns en självkoppling med samma vy eller med någon av medlemstabellerna i -instruktionen.

  • Massimport av data till en partitionerad vy stöds inte av bcp eller BULK INSERT och-instruktionerna INSERT ... SELECT * FROM OPENROWSET(BULK...) . Du kan dock infoga flera rader i en partitionerad vy med hjälp av INSERT-instruktionen .

    Anmärkning

    Om du vill uppdatera en partitionerad vy måste användaren ha INSERT, UPDATEoch DELETE behörigheter för medlemstabellerna.

Ytterligare villkor för distribuerade partitionerade vyer

För distribuerade partitionerade vyer (när en eller flera medlemstabeller är fjärranslutna) gäller följande ytterligare villkor:

  • En distribuerad transaktion startas för att garantera atomitet över alla noder som påverkas av uppdateringen.

  • Ange alternativet XACT_ABORT SET till ON för INSERT, UPDATEeller DELETE -instruktioner som ska fungera.

  • Alla kolumner i fjärrtabeller av typen smallmoney som refereras i en partitionerad vy mappas som pengar. Därför måste motsvarande kolumner (i samma ordningstal i urvalslistan) i de lokala tabellerna också vara av typen pengar.

  • Under databaskompatibilitetsnivå 110 och senare mappas alla kolumner i fjärrtabeller av typen smalldatetime som refereras till i en partitionerad vy som smalldatetime. Motsvarande kolumner (i samma ordningsläge i urvalslistan) i de lokala tabellerna måste vara smalldatetime. Detta är en ändring i beteendet från tidigare versioner av SQL Server där alla kolumner i fjärrtabeller av typen smalldatetime som refereras i en partitionerad vy mappas som datetime och motsvarande kolumner i lokala tabeller måste vara av typen datetime. Mer information finns i ALTER DATABASE Compatibility Level (Transact-SQL).

  • En länkad server i den partitionerade vyn kan inte vara en loopback-länkad server. Det här är en länkad server som pekar på samma instans av SQL Server.

Inställningen för SET ROWCOUNT alternativet ignoreras för INSERT, UPDATEoch DELETE åtgärder som omfattar uppdateringsbara partitionerade vyer och fjärrtabeller.

När medlemstabellerna och den partitionerade vydefinitionen är på plats skapar SQL Server-frågeoptimeraren intelligenta planer som använder frågor effektivt för att komma åt data från medlemstabeller. CHECK Med villkorsdefinitionerna mappar frågeprocessorn fördelningen av nyckelvärden mellan medlemstabellerna. När en användare utfärdar en fråga jämför frågeprocessorn kartan med de värden som anges i WHERE -satsen och skapar en körningsplan med en minimal mängd dataöverföring mellan medlemsservrar. Om vissa medlemstabeller finns på fjärrservrar löser instansen av SQL Server därför distribuerade frågor så att mängden distribuerade data som måste överföras är minimal.

Överväganden för replikering

Följande överväganden gäller för att skapa partitionerade vyer på medlemstabeller som ingår i replikeringen:

  • Om de underliggande tabellerna ingår i sammanslagningsreplikering eller transaktionsreplikering med uppdatering av prenumerationer kontrollerar du att kolumnen uniqueidentifier också ingår i urvalslistan.

    Alla INSERT åtgärder i den partitionerade vyn måste ange ett NEWID() värde för kolumnen uniqueidentifier . Alla UPDATE-åtgärder mot kolumnen uniqueidentifier måste anges NEWID() som värde eftersom nyckelordet DEFAULT inte kan användas.

  • Replikeringen av uppdateringar som görs med hjälp av vyn är densamma som när tabeller replikeras i två olika databaser: tabellerna hanteras av olika replikeringsagenter och ordningen på uppdateringarna garanteras inte.

Behörigheter

Kräver CREATE VIEW-behörighet i databasen och ALTER-behörighet för schemat där vyn skapas.

Exempel

I följande exempel används AdventureWorks2022 databasen eller AdventureWorksDW2022 .

A. Använda CREATE VIEW för att skapa en vy

I följande exempel skapas en vy med hjälp av en SELECT -instruktion. En enkel vy är användbar när en kombination av kolumner efterfrågas ofta. Data från den här vyn kommer från tabellerna HumanResources.Employee och Person.Person i databasen AdventureWorks2022. Data innehåller information om namn och anställningsdatum för anställda i Adventure Works Cycles. Vyn kan skapas för den person som ansvarar för att spåra arbetsjubileum, men utan att ge den här personen åtkomst till alla data i dessa tabeller.

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. Använda MED KRYPTERING

I följande exempel används alternativet WITH ENCRYPTION och beräknade kolumner, omdöpta kolumner och flera kolumner visas.

Gäller för: SQL Server 2008 (10.0.x) och senare och 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. ANVÄND ALTERNATIVET MED KONTROLL

I följande exempel visas en vy med namnet dbo.SeattleOnly som refererar till fem tabeller och tillåter att dataändringar endast gäller för anställda som bor i Seattle.

CREATE VIEW dbo.SeattleOnly  
AS  
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode  
FROM HumanResources.Employee e  
INNER JOIN Person.Person p  
ON p.BusinessEntityID = e.BusinessEntityID  
    INNER JOIN Person.BusinessEntityAddress bea   
    ON bea.BusinessEntityID = e.BusinessEntityID   
    INNER JOIN Person.Address a   
    ON a.AddressID = bea.AddressID  
    INNER JOIN Person.StateProvince sp   
    ON sp.StateProvinceID = a.StateProvinceID  
WHERE a.City = 'Seattle'  
WITH CHECK OPTION ;  
GO  

D. Använda inbyggda funktioner i en vy

I följande exempel visas en vydefinition som innehåller en inbyggd funktion. När du använder funktioner måste du ange ett kolumnnamn för den härledda kolumnen.

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. Använda partitionerade data

I följande exempel används tabeller med namnet SUPPLY1, SUPPLY2, SUPPLY3och SUPPLY4. Dessa tabeller motsvarar leverantörstabellerna från fyra kontor i olika regioner.

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

Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)

F. Skapa en vy genom att ansluta två tabeller

I följande exempel skapas en vy med hjälp av en SELECT -instruktion med en OUTER JOIN. Resultatet av kopplingsfrågan fyller i vyn.

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