El Transact-SQL (T-SQL) es un propietario de la extensión de Sybase y Microsoft lenguaje SQL . Transact-SQL fue desarrollado originalmente por la empresa Sybase, a partir de las primeras versiones de su motor de base de datos del mismo nombre. Similar al PL / SQL de Oracle, Transact-SQL proporcionó los medios para extender la funcionalidad básica del DBMS, a través de programas llamados "procedimientos almacenados". El código fuente, tal como se compila, de hecho se almacena en la base de datos, a diferencia de los programas escritos en lenguaje de programación clásico, cuyo código fuente, por un lado, el código compilado por otro lado, se almacena en archivos del sistema de archivos.
Cuando Microsoft quiso ampliar su oferta de software para incluir un DBMS relacional, hizo acuerdos con uno de los jugadores en ese momento, el retador, principalmente detrás de Oracle, RTI Ingres, Informix: Sybase. El DBMS de Sybase se ha adaptado a Windows. Microsoft ha adquirido gradualmente conocimientos en DBMS relacional y ha desarrollado su propio motor de base de datos, Microsoft SQL Server, a partir de la variedad Sybase. Sybase, por su parte, ha desarrollado su DBMS, que desde entonces se ha convertido en Adaptive Server Enterprise . Por lo tanto, Transact-SQL es hoy en día el lenguaje de programación asociado con Microsoft SQL Server y Sybase Adaptive Server Enterprise DBMS .
En comparación con SQL, T-SQL agrega las siguientes características:
Los principales bits de la clave de instrucciones de programación de procedimiento son de Transact-SQL BEGINy END, BREAK, CONTINUE, GOTO, IFy ELSE, RETURN, WAITFOR, y WHILE.
IFy ELSEpermitir ejecuciones condicionales. El siguiente ejemplo mostrará "Estamos en el fin de semana" si el día D pertenece al fin de semana, "Estamos en la semana" para un día de la semana.
IF DATEPART(dw, GETDATE()) = 6 OR DATEPART(dw, GETDATE()) = 7 PRINT 'Nous sommes en week-end.' ELSE PRINT 'Nous sommes en semaine.'BEGINy ENDdelimitar un bloque de instrucciones. Si se necesita más de una instrucción en un bloque condicional, debe usar BEGIN y END:
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 permitirá retrasar el procedimiento, mientras se espera una hora determinada o un momento preciso del día.
RETURNse utiliza para terminar inmediatamente la ejecución de un procedimiento almacenado o para devolver el resultado de una función.
BREAKterminará el bloque en un bucle WHILE, mientras lo CONTINUEobliga a realizar una nueva iteración del bucle.
Transact-SQL permite el uso de operadores aritméticos clásicos.
Las variables locales se utilizan a menudo como contadores en bucles WHILEo bloques de tipos IF ... ELSE. Se pueden utilizar en comandos o en procedimientos almacenados . El procedimiento utiliza estas variables de forma automática y no interactiva cuando se ejecuta. Las variables locales se pueden usar en cualquier lugar donde la sintaxis de Transact-SQL requiera el uso de una expresión .
La declaración de variables locales es similar a la de los lenguajes imperativos clásicos. Sigue la siguiente sintaxis:
declare @nom_variable type_données [, @nom_variable type_données]...Ejemplos:
declare @a int declare @b char(20) declare @c floatO
declare @a int, @b char(20), @c floatLa segunda sintaxis es más eficiente en términos de memoria y rendimiento.
Una subrutina que asigna un valor a una variable local debe devolver solo un valor.
Ejemplos:
declare @veryhigh money select @veryhigh = max(price) from titles if @veryhigh > $20 print "Aïe!"Las variables locales son inicialmente NULL cuando se declaran. También pueden ser NULL desde un comando SELECT. Dado que NULL es un valor especial, la comparación entre variables de valor NULL y otros valores NULL debe seguir reglas especiales que se resumen en la siguiente tabla.
Una expresión puede ser una variable , una constante o una combinación de las dos que contienen operadores aritméticos .
Tipo de comparación | Operador = | Operadores <,>, <= ,! = ,! <,!>, <> |
---|---|---|
Comparación entre dos columnas nulas | FALSO | FALSO |
Comparación entre la columna de valor NULL y la expresión NULL | FALSO | FALSO |
Comparación entre la expresión NULL y la columna de valor NULL | FALSO | FALSO |
Comparación entre dos expresiones NULL | CIERTO | FALSO |
El Transact-SQL permite agregar una cláusula FROMa las operaciones DELETEy UPDATE, permitiendo la unión de tablas.
El siguiente ejemplo eliminará de la tabla utilisateuraquellos que tengan el indicador " Pendiente ".
DELETE utilisateur FROM utilisateur as u JOIN drapeau_utilisateur as d ON u.id = d.id WHERE d.nom = 'En attente'