Microsoft SQL Server
SKAPA VISNING
Sök…
SKAPA VISNING
CREATE VIEW view_EmployeeInfo
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM Employee
GO
Rader från vyer kan väljas ungefär som tabeller:
SELECT FirstName
FROM view_EmployeeInfo
Du kan också skapa en vy med en beräknad kolumn. Vi kan ändra vyn ovan enligt följande genom att lägga till en beräknad kolumn:
CREATE VIEW view_EmployeeReport
AS
SELECT EmployeeID,
FirstName,
LastName,
Coalesce(FirstName,'') + ' ' + Coalesce(LastName,'') as FullName,
HireDate
FROM Employee
GO
Den här vyn lägger till en ytterligare kolumn som kommer att visas när du SELECT
rader från den. Värdena i den här extra kolumnen beror på fälten FirstName
och LastName
i tabellen Employee
och uppdateras automatiskt bakom kulisserna när dessa fält uppdateras.
SKAPA VIEW med kryptering
CREATE VIEW view_EmployeeInfo
WITH ENCRYPTION
AS
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employee
GO
SKAPA VIEW MED INNER JOIN
CREATE VIEW view_PersonEmployee
AS
SELECT P.LastName,
P.FirstName,
E.JobTitle
FROM Employee AS E
INNER JOIN Person AS P
ON P.BusinessEntityID = E.BusinessEntityID
GO
Vyer kan använda joins för att välja data från flera källor som tabeller, tabelfunktioner eller till och med andra vyer. I det här exemplet används kolumnerna Förnamn och Efternamn från persontabellen och kolumnen Jobbtitel från medarbetartabellen.
Den här vyn kan nu användas för att se alla motsvarande rader för chefer i databasen:
SELECT *
FROM view_PersonEmployee
WHERE JobTitle LIKE '%Manager%'
SKAPA Indexerat VIEW
För att skapa en vy med ett index måste vyn skapas med hjälp av WITH SCHEMABINDING
nyckelorden:
CREATE VIEW view_EmployeeInfo
WITH SCHEMABINDING
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM [dbo].Employee
GO
Alla grupperade eller icke-klusterade index kan nu skapas:
CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
EmployeeID ASC
)
Det finns några begränsningar för indexerade vyer:
Vistdefinitionen kan hänvisa till en eller flera tabeller i samma databas.
När det unika klusterindex har skapats kan ytterligare icke-slutna index skapas mot vyn.
Du kan uppdatera informationen i de underliggande tabellerna - inklusive bilagor, uppdateringar, raderingar och till och med trunkerar.
Du kan inte ändra de underliggande tabellerna och kolumnerna. Vyn skapas med alternativet MED SCHEMABINDING.
Den kan inte innehålla COUNT, MIN, MAX, TOP, ytterförbindelser eller några få andra nyckelord eller element.
För mer information om hur du skapar indexerade vyer kan du läsa denna MSDN-artikel
Grupperade VISNINGAR
En grupperad VIEW är baserad på en fråga med en GROUP BY-klausul. Eftersom var och en av grupperna kan ha mer än en rad i basen från vilken den byggdes, är dessa nödvändigtvis endast läsbara VISNINGAR. Sådana VISNINGAR har vanligtvis en eller flera sammanlagda funktioner och de används för rapporteringsändamål. De är också praktiska för att arbeta kring svagheter i SQL. Överväg en VISNING som visar den största försäljningen i varje stat. Frågan är enkel:
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW BigSales (state_code, sales_amt_total)
AS SELECT state_code, MAX(sales_amt)
FROM Sales
GROUP BY state_code;
UNION-ed VIEWs
VISNINGAR baserade på en UNION eller UNION ALL operation är skrivskyddad eftersom det inte finns ett enda sätt att kartlägga en förändring på bara en rad i en av bastabellerna. UNION-operatören tar bort duplicerade rader från resultaten. Både UNION och UNION ALL operatörer döljer vilket bord raderna kom från. Sådana VISNINGAR måste använda a, eftersom kolumnerna i en UNION [ALL] inte har några egna namn. I teorin bör en UNION av två osammanhängande tabeller, som inte har duplicerade rader i sig, vara uppdaterbar.
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW DepTally2 (emp_nbr, dependent_cnt)
AS (SELECT emp_nbr, COUNT(*)
FROM Dependents
GROUP BY emp_nbr)
UNION
(SELECT emp_nbr, 0
FROM Personnel AS P2
WHERE NOT EXISTS
(SELECT *
FROM Dependents AS D2
WHERE D2.emp_nbr = P2.emp_nbr));