Delphi - Rendszer funkciók

forráskód letöltése
Transact SQL nyelvet tárgyaló sorozatunkban most a rendszer funkciókat vesszük sorra és megnézzük használatai lehetőségüket példákon keresztül. 01.sql
Első lépés, hogy létrehozunk egy adatbázist SystemFuncTest névvel, melyet a bemutatandó példákhoz használjuk.

02.sql
Következő lépésben egy táblát is létrehozunk és elhelyezünk benne néhány sornyi adatot is a tesztekhez.
create table Table01
(
  id int identity (1000, 5),
  value1 int,
  value2 int,
  value3 varchar(20)
)

03.sql: COALESCE
A COALESCE függvénynek több paramétert is megadhatunk vesszővel elválasztva. A függvény visszatérési értéke az átadott kifejezések közül az első nem null értéket adó kifejezés értéke lesz. Ha paraméterként mondjuk megadjuk A és B kifejezést, ebben a sorrendben, akkor először az A kifejezés lesz megvizsgálva, ha ez nem null, akkor ennek értékét adja vissza a függvény, ha null, akkor vizsgálja B kifejezést. Ha ez nem null, akkor B értéke lesz visszaadva. Ha B is null érték lenne, akkor a függvény visszatérési értéke is null lesz.
Visszatérési értékének típusa egyezik a kiválasztott kifejezés típusával.
SELECT CAST(COALESCE(value2, value1) AS varchar(10))
FROM Table01

04.sql: APP_NAME
Az aktuális folyamatot indító alkalmazás nevét az APP_NAME függvény szolgáltatja.
Visszatérési értéke: nvarchar(128)
select APP_NAME()
Programból az adatbázis kapcsolat létrehozásánál tudjuk megadni az alkalmazásunknak szánt nevet, mely az APP_NAME függvénnyel lekérdezhető.
    ADOConnection1.ConnectionString:='Application Name=Software Online TestApp';

05.sql: COLLATIONPROPERTY
Nyelvi tulajdonságokat kérdezhetünk le a COLLATIONPROPERTY használatával.
Visszatérési érték típusa: sql_variant
SELECT 'Hungarian_CS_AS' as Name, COLLATIONPROPERTY('Hungarian_CS_AS', 'CodePage') as CodePage,
    COLLATIONPROPERTY('Hungarian_CS_AS', 'LCID') as LCID, COLLATIONPROPERTY('Hungarian_CS_AS',
        'ComparisonStyle') as ComparisonStyle
Az első paraméterben megadható érték listáját az alábbi lekérdezés szolgáltatja.
SELECT * FROM ::fn_helpcollations()

06.sql: CURRENT_TIMESTAMP
Aktuális dátum és idő lekérdezése. A funkció egyenértékű a GetDate függvény hívásával.
Visszatérési érték típusa: datetime
SELECT CURRENT_TIMESTAMP as 'CURRENT_TIMESTAMP'

07.sql
CURRENT_USER - aktuális felhasználó neve, ugyanaz mintha a USER_NAME függvényt hívnánk. Visszatérési érték típusa: sysname.
SESSION_USER - aktuális folyamatot használó felhasználó neve. Visszatérési érték típusa: nchar.
SYSTEM_USER - rendszer felhasználói név
SELECT CURRENT_USER as 'CURRENT_USER', SESSION_USER as 'SESSION_USER', SYSTEM_USER as 'SYSTEM_USER',
    USER_NAME() as 'USER_NAME'

08.sql: datalength
A datalength függvénnyel meghatározhatjuk egy kifejezés értékének hosszát.
Visszatérési érték típusa: int
SELECT value3, datalength(value3) as 'datalength'
FROM Table01

09.sql: host_id, host_name
A host_id függvény a munkaállomás gép azonosítóját adja vissza, amelyről kapcsolódunk a szerverre. Visszatérési érték típusa: char(8).
A host_name függvény annak a munkaállomás gépnek a nevét adja vissza, amelyről kapcsolódunk a szerverre. Visszatérési érték típusa: nchar.
SELECT host_id() as HostID, host_name() as HostName

10.sql
A Table01 létrehozásakor az id mezőt az alábbi módon adtuk meg:
 id int identity (1000, 5),
IDENT_CURRENT - a legutoljára használt identity értéket adja vissza, mivel mellékelt példában 6 sor van, ami 1000-től számozódik ötösével, így ez 1025 lesz. Visszatérési érték típusa: sql_variant.
IDENT_SEED - az identity kezdő értéke. Visszatérési érték típusa: numeric.
IDENT_INCR - az identity növekménye. Visszatérési érték típusa: numeric.
select IDENT_CURRENT('Table01') as 'Current', IDENT_SEED('Table01') as 'Seed', IDENT_INCR('Table01')
    as 'Increment'

11.sql: IDENTITY
Az IDENTITY függvény csak egy esetben használható: amikor egy Select-et használunk Into táblanév formában. Ezzel lemásolhatunk egy táblát, illetve annak oszlopainak és sorainak bizonyos részhalmazát. Ekkor, ha az új tábla egyik mezőjében szeretnénk egy olyan mezőt, mely identity-ként viselkedik, akkor használható az IDENTITY függvény. Paraméterként a mező típusa, a számláló kezdő értéke, valamint annak növekménye adható meg.
Alábbi példában lemásoljuk a Table01 tábla teljes tartalmát egy Table02 most létrehozandó táblába. A Table01 id mezőjét nem másoljuk. Ehelyett használjuk az IDENTITY függvényt és egy új értéket hozunk létre newid oszlopnévvel. A Table01 value1 oszlopát átmásoljuk, de most v1 nevet adunk neki. A value2-t és value3-t változtatás nélkül átmásoljuk.
SELECT
   IDENTITY(int, 1000, 1000) AS newid,
   value1 as v1,
   value2,
   value3
INTO Table02
FROM Table01

12.sql: isdate
Annak vizsgálatára, hogy egy sztring dátumot tartalmaz-e vagy sem, az IsDate függvény segít bennünket.
Visszatérési érték típusa: int. Értéke 1, ha valós dátum és 0, ha nem az a megadott kifejezés.
select isdate('99/11/22'), isdate('11/22/99'), isdate('1120'), isdate('11:20')

13.sql: isnull
Ha egy kifejezés értéke null lenne, akkor megadhatjuk, hogy ez milyen értékkel legyen helyettesítve. Ehhez az isnull függvényt kell használnunk. Első paramétere a vizsgálandó kifejezés. A második a behelyettesítendő érték. Ha a kifejezés értéke nem null, akkor a függvény ezt adja vissza. Null esetén pedig a második paraméterben megadott értéket.
Visszatérési érték típusa egyezik az első paraméter típusával.
select value1, isnull(value1, 10000)
from Table01

14.sql: isnumeric
Annak eldöntésére, hogy egy kifejezés számot ad-e eredményül vagy sem, az isnumeric függvény használható. Paraméterként a vizsgálandó kifejezést kell átadni.
Visszatérési érték típusa: int. Értéke 1, ha valós szám és 0, ha nem az a megadott kifejezés
select value1, isnumeric(value1), isnumeric(1), isnumeric('c')
from Table01

15.sql: newid
Új GUID azonosító generálására szolgál a newid függvény.
Visszatérési érték típusa: uniqueidentifier
select newid()

16.sql: NULLIF
Nullif függvény null értéket ad vissza abban az esetben, ha a két paraméterként átadott kifejezés értéke megegyezik. Ellenkező esetben az első kifejezés értékét kapjuk vissza.
Visszatérési érték típusa egyezik az első kifejezés típusával.
SELECT NULLIF(1001, 1000), NULLIF(1000, 1000)

17.sql: PARSENAME
A PARSENAME függvény segítségével felbonthatjuk részekre egy objektum teljesen minősített nevének kifejezését, mely tartalmazhatja a szerver nevét, az adatbázis nevét, a tulajdonos nevét és az objektum nevét.
Első paraméterként a nevet, másodikként egy számot kell megadnunk, melynek az alábbi lesz a jelentése:
  • 1 - az objektum neve
  • 2 - a tulajdonos neve
  • 3 - az adatbázis neve
  • 4 - a szerver neve
Visszatérési érték típusa: nchar
declare @s varchar(50)
select @s='as1\netsdk.northwind.dba.products'
select PARSENAME(@s, 1), PARSENAME(@s, 2), PARSENAME(@s, 3), PARSENAME(@s, 4)

18.sql: @@rowcount
A legutoljára végzett művelet által érintett sorok számát adja a @@rowcount. Mellékelt példában töröljük a Table01 összes sorát, majd lekérdezzük a @@rowcount értékét és így megtudjuk hogy hány sor lett törölve.
Visszatérési érték típusa: int.
delete Table01
select @@rowcount as 'Törölt sorok száma', ROWCOUNT_BIG()

19.sql: SERVERPROPERTY
A szerver tulajdonságait kérdezhetjük le a SERVERPROPERTY függvénnyel. Paraméterként a lekérdezendő tulajdonság nevét kell megadnunk, mely az alábbiak egyike lehet:
  • Collation - nvarchar típusban megkapjuk az alapértelmezett nyelvi beállítás megnevezését.
  • Edition - nvarchar(128) típusban megkapjuk az SQL szerver változatának megnevezését. Lehetséges értékek alább láthatóak.
  • Engine Edition - int típusban kapjuk vissza, hogy az SQL szerver motorjának melyik változata fut. Lehetséges értékek alább láthatóak.
  • InstanceName - nvarchar típusban megkapjuk az SQL szerver példányának nevét, melyhez a felhasználó kapcsolódik.
  • IsClustered - értéke 1, ha az SQL szerver fürtözve van, 0 ha nincs.
  • IsFullTextInstalled - értéke 1, ha a Full Text szolgáltatás telepítve, 0 ha nincs.
  • IsIntegratedSecurityOnly - értéke 1, ha a szerver integrált biztonsági módban van, 0 ha nem.
  • IsSingleUser - értéke 1, ha a szerver egy felhasználós módban van, 0 ha nem.
  • IsSyncWithBackup - értéke 1, ha publikált, vagy szétosztott, 0 ha nem.
  • LicenseType - licencszelés módja. Lehetséges értékek alább láthatóak.
  • MachineName - nvarchar típusban megkapjuk az SQL szervert futtató gép nevét.
  • NumLicenses - int típusban megkapjuk a licencek számát.
  • ProcessID - int típusban megkapjuk az SQL szerver szervizének Process azonosítóját.
  • ProductVersion - varchar(128) típusban megkapjuk az SQL szerver verziószámát, 'major.minor.build' formában.
  • ProductLevel - nvarchar(128) típusban megkapjuk az SQL szerver szintjét. Lehetséges értékek alább láthatóak.
  • ServerName - nvarchar típusban megkapjuk az SQL szerver nevét.

Az Edition tulajdonság az alábbi megnevezéseket adhatja vissza:
  • 'Desktop Engine' 'Developer Edition' 'Enterprise Edition' 'Enterprise Evaluation Edition' 'Personal Edition' 'Standard Edition'

Az Engine Edition tulajdonság az alábbi értékeket adhatja vissza:
  • 1 = Personal vagy Desktop Engine 2 = Standard 3 = Enterprise, Enterprise Evaluation, Developer

A LicenseType tulajdonság az alábbi értékeket adhatja vissza:
  • PER_SEAT - felhasználónkénti licenc
  • PER_PROCESSOR - processzoronkénti licenc DISABLED - licencszelés letiltva.

A ProductLevel tulajdonság az alábbi értékeket adhatja vissza:
  • 'RTM' - kész verzió
  • 'SPn' - szervizcsomaggal frissített verzió, ahol az n a szervizcsomag száma
  • 'Bn' - béta verzió, ahol az n a béta verzió száma

21.sql
Példánk befejezéseképp töröljük a létrehozott SystemFuncTest adatbázist.
DROP DATABASE SystemFuncTest
select 'Adatbázis törölve'