Delphi - Transact SQL Referencia

Transact SQL 1. rész

forráskód letöltése
Új cikksorozatunk keretén belül az MS SQL szerverben használatos Transact SQL nyelvről és annak Delphi-ből történő felhasználási lehetőségeiről lesz szó. A mellékelt példákban referencia szintű, gyakorlati megvalósításokon keresztül kerülnek bemutatásra a Transact SQL nyelv lehetőségei.

Az SQL nyelv területén teljesen kezdők számára ajánljuk először a Delphi-ben használható Local SQL nyelvet bemutató cikksorozatunk tanulmányozását, majd csak ezt követően a most induló Transact SQL cikkeit. A példák készítésekor az MS SQL 2000-es verzióját használtuk, de ezek legnagyobb része változtatás nélkül használhatók az SQL szerver régebbi verzióival is.

A példaprogram használatához az MS SQL Northwind példa adatbázisát használjuk. A kapcsolódáshoz adja meg a szervernevet, bejelentkező nevet és a szükséges jelszót. A Connect gomb lenyomásával hozhatjuk létre a kapcsolatot, melyhez az ADO komponenseit használjuk. Ezek után a ListBox1-ben felsorolt T-SQL utasításokat lehet futtatni egy-egy kattintással.

Cikksorozatunk első részében a T-SQL nyelv belső változóinak lekérdezését, felhasználását vesszük sorra.

01.sql: @@CONNECTIONS
Az SQL szerver kapcsolatainak száma.
Változó típusa: integer
SELECT @@CONNECTIONS as 'Kapcsolatok száma'

02.sql: @@ MAX_CONNECTIONS
Az SQL szerver maximálisan lehetséges kapcsolatainak száma.
Változó típusa: integer
SELECT @@MAX_CONNECTIONS as 'Maximális kapcsolatok száma'

03.sql: @@DATEFIRST
Ebből a változóból megtudhatjuk, hogy a rendszer aktuálisan melyik napot tekinti az elsőnek a héten. A hét napjai egytől indulva vannak számozva. Az egyeshez a hétfő tartozik.
Változó típusa: tinyint
declare @dayname varchar(30)
if @@DATEFIRST = 1 select @dayname = 'Hétfő'
if @@DATEFIRST = 2 select @dayname = 'Kedd'
if @@DATEFIRST = 3 select @dayname = 'Szerda'
if @@DATEFIRST = 4 select @dayname = 'Csütörtök'
if @@DATEFIRST = 5 select @dayname = 'Péntek'
if @@DATEFIRST = 6 select @dayname = 'Szombat'
if @@DATEFIRST = 7 select @dayname = 'Vasárnap'
select @dayname as 'A hét első napja'
Lehetőségünk van arra is, hogy mi magunk állíthassuk be, hogy melyik legyen ez a nap. Ehhez a SET utasítást kell használnunk:
SET DATEFIRST 1

04.sql: @@DBTS
Visszaadja az adott adatbázishoz tartozó aktuális értékét az ún. timestamp-nak. Ez egy olyan érték lesz, mely garantáltan egyedi az adatbázisra nézve. A változó mindig az utoljára használt timestamp értéket adja vissza. Új értéket ez a változó majd csak akkor kap, ha egy olyan sor kerül beszúrásra (insert), vagy módosításra (update) egy táblába, mely tartalmaz timestamp mezőt.
Változó típusa: varbinary
SELECT cast(@@DBTS AS int) as 'Aktuális timestamp'

05.sql: @@ERROR
A legutoljára futtatott Transact SQL utasítás hibakódját tartalmazza az ERROR változó. Ha ennek értéke nulla, akkor nem történt hiba. Ha nullától eltérő értéket kapunk, akkor a hiba leírását kiolvashatjuk a Master adatbázis SysMessages táblájának abból a sorából, melynek azonosító száma megegyezik az ERROR változó értékével.
Változó típusa: integer
INSERT INTO Customers (CustomerID, CompanyName)
VALUES ('AS', 'Animare')
select @@ERROR as 'Hiba kód'

06.sql: @@IDENTITY
A változóból kiolvashatjuk az utoljára használt azonosító mezőbe írt értéket. Ez az érték kerül felhasználásra a tábla azon mezőjénél, melynél az Identity engedélyezett. A változó annyival nő, amilyen érték az Indentity Increment paraméterben meg lett adva az adott mezőnél, ez alapértelmezésben egy. Mivel minden táblában csak egy Identity típusú mező lehet, így e változó értéke az adott táblára nézve mindig egyedi. Fontos tudni, hogy a változó értéke nem csökken olyan esetben mikor ugyan már növelve lett értéke, de az még sem kerül végleges felhasználásra (például egy új sor beszúrásánál rollback történik, valamilyen hiba miatt).
Változó típusa: numeric
SELECT @@IDENTITY AS 'Identity utolsó értéke'

07.sql: @@IDLE, @@IO_BUSY
Az IDLE változóból megtudhatjuk, hogy az SQL szerver indulása óta mennyi idő telt el üresjáratban, vagyis mióta nem végzett tevékenységet az SQL szerver.
Az IO_BUSY változó azt árulja el, hogy az SQL szerver indulása óta mennyi idő telt el, amikor a szerver IO műveleteket végzett.
Mind a két időt ezredmásodpercben kapjuk meg.
Az IDLE és IO_BUSY változó típusa: integer
SELECT @@IDLE AS 'Idle ms', @@IO_BUSY AS 'IO ms'

08.sql: @@LANGID
Az aktuálisan használt nyelvi azonosítót tudhatjuk meg ebből a változóból. Az érték alapján az adott nyelv megnevezését és további információt lekérdezhetjük a Master adatbázis Language táblájából.
Változó típusa: integer
USE Master
SELECT * From SysLanguages where langid=@@LANGID
A SET utasítással lehetőségünk van arra is, hogy beállítsuk az aktuális nyelvet:
SET LANGUAGE 'Hungarian'

09.sql: @@ LANGUAGE
Az aktuális nyelv azonosítója alapján a SysLanguage tábla megfelelő mezőjéből elővarázsolhatjuk a nyelv megnevezést is, de erre egyszerűbb módszert kínál a LANGUAGE változó.
Változó típusa: nvarchar
select @@LANGID as 'LangID', @@LANGUAGE as 'Language'

10.sql: @@ LOCK_TIMEOUT
Az aktuális zárolás maximális idejét olvashatjuk ki ezredmásodpercben ebből a változóból. Ha az itt tárolt értéknél tovább van zárolása alatt egy-egy objektum, akkor az aktuális művelet törlésre kerül és a zárolás fel lesz oldva, valamint az alkalmazás egy hibaüzenetet kap.
-1 érték esetén nincs zárolási idő figyelés.
Változó típusa: integer
SELECT @@LOCK_TIMEOUT 'Zárolási időhatár'
A zárolási időt beállíthatjuk a SET utasítással, ahol a LOCK_TIMEOUT kulcsszó után adhatjuk meg ezredmásodpercben a kívánt időtartamot.
SET LOCK_TIMEOUT 5000

Transact SQL cikksorozat