C# - 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 C#-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.
A cikksorozatban nem foglalkozunk az SQL nyelv legalapvetőbb lehetőségeivel, így például kimarad a "select * from products" és hasonló egyszerű lehetőségek tárgyalása, ezért a sorozatot azok számára ajánljuk, akik már túl vannak a kezdeti lépéseken.
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

Transact SQL Referencia - Transact SQL 1. rész

Transact SQL további belső változói - Transact SQL 2. rész
Dátumkezelés a Transact SQL-ben - Transact SQL 3. rész
Sztringkezelés a Transact SQL-ben - Transact SQL 4. rész
Folyamatvezérlés eszközei a Transact SQL-ben - Transact SQL 5. rész
Összesítő függvények - Transact SQL 6. rész
Adatbázisok létrehozása, törlése - Transact SQL 7. rész
Adatbázis módosítás lehetőségei - Transact SQL 8. rész
Táblák létrehozása - Transact SQL 9. rész
Táblák módosítása, törlése - Transact SQL 10. rész
Rendszer funkciók - Transact SQL 11. rész
Adatkonvertálási lehetőségek - Transact SQL 12. rész
Tárolt eljárás létrehozása - TransactSQL 13. rész
Triggerek kezelése - Transact SQL 14. rész
Indexek létrehozása - Transact SQL 15. rész
Függvények definiálása - Transact SQL 16. rész
Függvények felüldefiniálása és törlése - Transact SQL 17. rész
Szabályok létrehozása - Transact SQL 18. rész
Alapértelmezett értékek megadása - Transact SQL 19. rész
Nézet táblák létrehozása - Transact SQL 20. rész
Nézettáblák módosítása - Transact SQL 21. rész
Adatbázis és tranzakciós napló mentése - Transact SQL 22. rész
Elmentett adatbázis és tranzakciós napló visszaállítása - Transact SQL 23. rész
Full-Text Catalog létrehozása, használata - Transact SQL 24. rész
Full-Text Catalog további lehetőségei - Transact SQL 25. rész
Tranzakció-kezelés az MS SQL-ben - Transact SQL 26. rész
Tranzakció-kezelés az MS SQL-ben - Transact SQL 27. rész
SET parancsok - Transact SQL 28. rész