Delphi - Nézettáblák létrehozása

Transact SQL 20. rész

forráskód letöltése
A cikksorozat ezen részében a nézettáblák létrehozásának módjával foglalkozunk.
A nézettáblák olyan dinamikus táblák, amelyek tulajdonképpen egy SELECT lekérdezés eredményei. Így egy nézettábla egyszerre akár több tábla összekapcsolt adatait is tartalmazhatja bizonyos feltételekkel szűrve, rendezve. A nézettáblát úgy használhatjuk, mintha egy normáltábla lenne, tehát akár lekérdezésekben is szerepelhet.
Egy nézettáblát a CREATE VIEW utasítással tudunk létrehozni. Az utasítás után meg kell adni a nézettábla nevét, majd az AS kulcsszó után a SELECT lekérdezést.
Néhány korlátozás van a normál táblákkal szemben. Először is ideiglenes táblákhoz nem hozhatunk létre nézettáblákat. A másik fontos dolog, hogy a nézettáblához nem készíthetünk triggereket. Ha belegondolunk, ez teljesen érthető, hiszen a nézettábláknak a normál táblák szolgáltatják az adatokat, tehát az azokhoz létrehozott triggerek lesznek érvényesek a nézettáblára is. További korlátozás, hogy az ORDER BY záradék (rendezés) csak sorok lekérdezése esetén használható (pl. TOP 10). Nem használhatjuk továbbá a COMPUTE záradékot (virtuális oszlopok létrehozása) és az INTO kulcsszó használatát is kerülni kell.
Ebben a példában nem hozunk létre saját adatbázist, hanem a NorthWind példa adatbázist használjuk fel.
01.sql
Kapcsolódunk a NorthWind adatbázishoz, és lefuttatunk egy lekérdezést.
02.sql
Készítünk egy nézet táblát az előző lekérdezéssel. Ezentúl a lekérdezés eredményét úgy használhatjuk, mintha egy tábla lenne. Mivel az eredményt rendezzük, a nézet tábla lekérdezésben a TOP záradékot is meg kell adni.
CREATE VIEW dbo.VIEW1
AS
SELECT DISTINCT TOP 100 PERCENT 
  dbo.Region.RegionDescription, 
  dbo.Territories.TerritoryDescription, 
  dbo.Employees.TitleOfCourtesy + ' ' + 
  dbo.Employees.FirstName + ' ' + 
  dbo.Employees.LastName AS EmpName
FROM dbo.Employees INNER JOIN dbo.EmployeeTerritories
  ON dbo.Employees.EmployeeID = dbo.EmployeeTerritories.EmployeeID
INNER JOIN dbo.Territories
  ON dbo.EmployeeTerritories.TerritoryID = dbo.Territories.TerritoryID
INNER JOIN dbo.Region
  ON dbo.Territories.RegionID = dbo.Region.RegionID
ORDER BY dbo.Region.RegionDescription, dbo.Territories.TerritoryDescription
03.sql
Adatokat kérdezünk le a nézet táblából úgy, mintha az egy normál tábla lenne.
SELECT RegionDescription, TerritoryDescription
FROM View1 WHERE EmpName like('Dr. Andrew%')
04.sql
Ha már nincs szükség a nézet táblára, akkor a DROP VIEW utasítással törölhetjük azt. Az utasítás után meg kell adni a nézet tábla nevét.

Transact SQL cikksorozat