A Transact-SQL (T-SQL) a Sybase és a Microsoft nyelvű SQL kiterjesztés tulajdonosa . A Transact-SQL-t eredetileg a Sybase cég fejlesztette ki, azonos nevű adatbázis-motorjának legkorábbi verzióiból. Az Oracle PL / SQL-jéhez hasonlóan a Transact-SQL biztosította az eszközöket a DBMS alapvető funkcióinak kiterjesztésére, "tárolt eljárásoknak" nevezett programokon keresztül. A lefordított forráskód tulajdonképpen az adatbázisban van tárolva, szemben a klasszikus programozási nyelven írt programokkal, amelyeknek egyrészt a forráskódja, másrészt a lefordított kód a fájlrendszer fájljaiban tárolódik.
Amikor a Microsoft bővíteni akarta szoftverkínálatát egy relációs DBMS-re, akkor megállapodást kötött az akkori egyik szereplővel, a kihívóval, főként az Oracle, az RTI Ingres, az Informix: Sybase mögött. A Sybase DBMS-t a Windows rendszerre portolták. A Microsoft fokozatosan szerzett know-how-t a relációs DBMS-ben, és a Sybase törzsből kifejlesztette saját adatbázis-motorját, a Microsoft SQL Server-t. A Sybase a maga részéről továbbfejlesztette DBMS-jét, amely azóta Adaptive Server Enterprise névre vált . A Transact-SQL ezért ma a Microsoft SQL Server és a Sybase Adaptive Server Enterprise DBMS társított programozási nyelv .
Az SQL-hez képest a T-SQL a következő szolgáltatásokat adja hozzá:
A fő kulcs bit procedurális utasítások-SQL BEGINés END, BREAK, CONTINUE, GOTO, IFés ELSE, RETURN, WAITFOR, és WHILE.
IFés ELSElehetővé teszik a feltételes kivégzéseket. Az alábbi példában a "Hétvégén vagyunk" felirat jelenik meg, ha a D-nap a hétvégéhez tartozik, a "Héten vagyunk" a hét egyik napján.
IF DATEPART(dw, GETDATE()) = 6 OR DATEPART(dw, GETDATE()) = 7 PRINT 'Nous sommes en week-end.' ELSE PRINT 'Nous sommes en semaine.'BEGINés ENDlehatárol egy utasításblokkot. Ha több feltételre van szükség egy feltételes blokkban, akkor a BEGIN és az END parancsokat kell használnia:
IF DATEPART(dw, GETDATE()) = 6 OR DATEPART(dw, GETDATE()) = 7 BEGIN PRINT 'Nous sommes en week-end.' PRINT 'Faites une pause !' END ELSE BEGIN PRINT 'Nous sommes en semaine.' PRINT 'Vite, au boulot !' ENDWAITFOR lehetővé teszi az eljárás késleltetését, miközben egy bizonyos időre vagy a nap egy pontos pillanatára vár.
RETURNa tárolt eljárás végrehajtásának azonnali leállítására vagy egy függvény eredményének visszaadására szolgál.
BREAKegy ciklusban végzi a blokkot WHILE, miközben arra CONTINUEkényszeríti, hogy a kör új iterációját hajtsa végre.
A Transact-SQL lehetővé teszi a klasszikus számtani operátorok használatát.
A helyi változókat gyakran számlálóként használják a típusú ciklusokban WHILEvagy blokkokban IF ... ELSE. Használhatók parancsokban vagy tárolt eljárásokban . Az eljárás ezeket a változókat végrehajtáskor automatikusan és nem interaktív módon használja. A helyi változók bárhol használhatók, ahol a Transact-SQL szintaxis egy kifejezés használatát igényli .
A helyi változók deklarálása hasonló a klasszikus imperatív nyelvekéhez . A következő szintaxist követi:
declare @nom_variable type_données [, @nom_variable type_données]...Példák:
declare @a int declare @b char(20) declare @c floatVAGY
declare @a int, @b char(20), @c floatA második szintaxis a memória és a teljesítmény szempontjából hatékonyabb.
A helyi változónak értéket rendelő alprogramnak csak egy értéket kell visszaadnia.
Példák:
declare @veryhigh money select @veryhigh = max(price) from titles if @veryhigh > $20 print "Aïe!"A helyi változók deklaráláskor kezdetben NULL értékűek. A SELECT parancsból NULL is lehetnek. Mivel a NULL speciális érték, a NULL értékű változók és az egyéb NULL értékek összehasonlításához speciális szabályokat kell követni, amelyeket az alábbi táblázat foglal össze.
Egy kifejezés lehet változó , állandó vagy a kettő kombinációja, amely aritmetikai operátorokat tartalmaz .
Összehasonlítás típusa | Operátor = | Operátorok <,>, <= ,! = ,! <,!>, <> |
---|---|---|
Két null oszlop összehasonlítása | HAMIS | HAMIS |
A NULL érték oszlop és a NULL kifejezés összehasonlítása | HAMIS | HAMIS |
A null kifejezés és a null oszlop összehasonlítása | HAMIS | HAMIS |
Két NULL kifejezés összehasonlítása | IGAZ | HAMIS |
A Transact-SQL lehetővé teszi egy záradék hozzáadását FROMa műveletekhez DELETEés UPDATEa táblák összekapcsolását.
Az alábbi példa törölni fogja a táblázatból utilisateurazokat, amelyek " Függőben " zászlóval rendelkeznek .
DELETE utilisateur FROM utilisateur as u JOIN drapeau_utilisateur as d ON u.id = d.id WHERE d.nom = 'En attente'