Transact-SQL ( T-SQL ) es una extensión patentada de Microsoft y Sybase del lenguaje SQL (lenguaje de consulta estructurado) que se utiliza para interactuar con bases de datos relacionales . T-SQL amplía el estándar SQL para incluir programación procedimental , variables locales , varias funciones de soporte para procesamiento de cadenas, procesamiento de fechas, matemáticas, etc. y cambios en las instrucciones DELETE y UPDATE .
Transact-SQL es fundamental para el uso de Microsoft SQL Server . Todas las aplicaciones que se comunican con una instancia de SQL Server lo hacen enviando instrucciones Transact-SQL al servidor, independientemente de la interfaz de usuario de la aplicación.
Los procedimientos almacenados en SQL Server son rutinas ejecutables del lado del servidor. La ventaja de los procedimientos almacenados es la capacidad de pasar parámetros.
Transact-SQL proporciona las siguientes instrucciones para declarar y establecer variables locales: DECLARE
, SET
y SELECT
.
DECLARE @var1 NVARCHAR ( 30 ); SET @var1 = 'Algún nombre' ; SELECT @var1 = Nombre FROM Ventas . Tienda WHERE CustomerID = 100 ;
Las palabras clave para el control de flujo en Transact-SQL incluyen BEGIN
y END
, BREAK
, CONTINUE
, GOTO
, IF
y ELSE
, RETURN
, WAITFOR
y WHILE
.
IF
y ELSE
permitir la ejecución condicional. Esta instrucción por lotes imprimirá "Es fin de semana" si la fecha actual es un día de fin de semana, o "Es un día laborable" si la fecha actual es un día laborable. (Nota: Este código supone que el domingo está configurado como el primer día de la semana en la @@DATEFIRST
configuración).
SI DATEPART ( dw , GETDATE ()) = 7 O DATEPART ( dw , GETDATE ()) = 1 IMPRIMIR 'Es fin de semana.' ; DE LO CONTRARIO IMPRIMIR 'Es un día laborable.' ;
BEGIN
y END
marcar un bloque de declaraciones . Si más de una declaración debe ser controlada por la condición en el ejemplo anterior, podemos usar BEGIN
y END
de esta manera:
SI DATEPART ( dw , GETDATE ()) = 7 O DATEPART ( dw , GETDATE ()) = 1 BEGIN PRINT 'Es fin de semana.' ; PRINT '¡Descansa un poco el fin de semana!' ; END ; DE LO CONTRARIO BEGIN PRINT 'Es un día laborable.' ; PRINT '¡Ponte a trabajar un día laborable!' ; END ;
WAITFOR
esperará un tiempo determinado o hasta una hora determinada del día. La instrucción se puede utilizar para generar demoras o para bloquear la ejecución hasta la hora establecida.
RETURN
Se utiliza para regresar inmediatamente desde un procedimiento o función almacenada .
BREAK
finaliza el WHILE
bucle que lo encierra y CONTINUE
hace que se ejecute la siguiente iteración del bucle. WHILE
A continuación se muestra un ejemplo de bucle.
DECLARAR @i INT ; ESTABLECER @i = 0 ; MIENTRAS @i < 5 COMIENZA IMPRIMIR 'Hola mundo.' ; ESTABLECER @i = @i + 1 ; FIN ;
En Transact-SQL, tanto las instrucciones DELETE
como UPDATE
las instrucciones se mejoran para permitir que se utilicen datos de otra tabla en la operación, sin necesidad de una subconsulta:
DELETE
acepta tablas unidas en la FROM
cláusula, de manera similar a SELECT
. Cuando esto se hace, el nombre o alias de la tabla que se eliminará en la unión se coloca entre DELETE
y FROM
.UPDATE
Permite FROM
agregar una cláusula. La tabla que se va a actualizar puede unirse en la FROM
cláusula y referenciarse mediante un alias, o referenciarse solo al comienzo de la declaración según el SQL estándar.Este ejemplo elimina todos users
los que han sido marcados en la user_flags
tabla con el indicador 'inactivo'.
ELIMINAR u DE usuarios COMO u UNIRSE INTERNAMENTAL user_flags COMO f EN u . id = f . id DONDE f . name = 'idle' ;
BULK
es una sentencia Transact-SQL que implementa un proceso de carga masiva de datos, insertando varias filas en una tabla y leyendo datos de un archivo secuencial externo. El uso de BULK INSERT
genera un mejor rendimiento que los procesos que emiten INSERT
sentencias individuales para cada fila que se va a agregar. Hay detalles adicionales disponibles en MSDN.
A partir de SQL Server 2005, [1] Microsoft introdujo TRY CATCH
lógica adicional para admitir el comportamiento de tipo de excepción. Este comportamiento permite a los desarrolladores simplificar su código y omitir @@ERROR
la comprobación después de cada instrucción de ejecución de SQL.
-- iniciar transacción BEGIN TRAN ; BEGIN TRY - ejecutar cada instrucción INSERT INTO MYTABLE ( NOMBRE ) VALORES ( 'ABC' ); INSERT INTO MYTABLE ( NOMBRE ) VALORES ( '123' ); -- confirmar la transacción COMMIT TRAN ; END TRY BEGIN CATCH -- revertir la transacción debido a un error ROLLBACK TRAN ; END CATCH ;