Transact-SQL ( T-SQL ) es la extensión patentada de Microsoft y Sybase del 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 de procedimientos , variables locales , varias funciones de soporte para procesamiento de cadenas, procesamiento de fechas, matemáticas, etc. y cambios en las declaraciones DELETE y UPDATE .
Transact-SQL es fundamental para utilizar Microsoft SQL Server . Todas las aplicaciones que se comunican con una instancia de SQL Server lo hacen enviando declaraciones 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
.
DECLARAR @var1 NVARCHAR ( 30 ); SET @var1 = 'Algún nombre' ; SELECT @var1 = Nombre DE Ventas . Tienda DONDE CustomerID = 100 ;
Las palabras clave para el control de flujo en Transact-SQL incluyen BEGIN
y END
, BREAK
, CONTINUE
, y , , y .GOTO
IF
ELSE
RETURN
WAITFOR
WHILE
IF
y ELSE
permitir la ejecución condicional. Esta declaración por lotes imprimirá "Es fin de semana" si la fecha actual es un día 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).
IF DATEPART ( dw , GETDATE ()) = 7 OR DATEPART ( dw , GETDATE ()) = 1 PRINT 'Es fin de semana.' ; ELSE PRINT 'Es un día laborable'. ;
BEGIN
y END
marcar un bloque de declaraciones . Si más de una declaración va a ser controlada por el condicional en el ejemplo anterior, podemos usar BEGIN
y END
así:
IF DATEPART ( dw , GETDATE ()) = 7 OR DATEPART ( dw , GETDATE ()) = 1 BEGIN PRINT 'Es fin de semana.' ; IMPRIMIR '¡Descansa un poco el fin de semana!' ; FIN ; ELSE BEGIN PRINT 'Es un día laborable'. ; IMPRIMIR '¡Ponte a trabajar en un día laborable!' ; FIN ;
WAITFOR
esperará un período de tiempo determinado o hasta una hora determinada del día. La declaración se puede utilizar para retrasar o bloquear la ejecución hasta el momento establecido.
RETURN
se utiliza para regresar inmediatamente de un procedimiento o función almacenados.
BREAK
WHILE
finaliza el bucle circundante , mientras que CONTINUE
hace que se ejecute la siguiente iteración del bucle. WHILE
A continuación se ofrece un ejemplo de bucle.
DECLARAR @i INT ; ESTABLECER @i = 0 ; WHILE @i < 5 BEGIN PRINT 'Hola mundo.' ; ESTABLECER @i = @i + 1 ; FIN ;
En Transact-SQL, tanto las instrucciones DELETE
como UPDATE
se mejoran para permitir que los datos de otra tabla se utilicen en la operación, sin necesidad de una subconsulta:
DELETE
acepta tablas unidas en la FROM
cláusula, de manera similar a SELECT
. Cuando se hace esto, el nombre o alias de la tabla de la combinación que se va a eliminar se coloca entre DELETE
y FROM
.UPDATE
FROM
permite añadir una cláusula. La tabla que se va a actualizar se puede unir en la FROM
cláusula y hacer referencia a ella mediante un alias, o hacer referencia solo al inicio de la declaración según 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 los usuarios COMO u UNIRSE INTERIOR user_flags COMO f EN u . identificación = f . identificación DONDE f . nombre = 'inactivo' ;
BULK
es una declaración 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
resultados produce un mejor rendimiento que los procesos que emiten INSERT
declaraciones individuales para cada fila que se agregará. Detalles adicionales están disponibles en MSDN.
A partir de SQL Server 2005, [1] Microsoft introdujo lógica adicional TRY CATCH
para admitir el comportamiento de tipo de excepción. Este comportamiento permite a los desarrolladores simplificar su código y omitir @@ERROR
la verificación después de cada ejecución de SQL.
-- comenzar la transacción BEGIN TRAN ; COMENZAR EL INTENTO : ejecute cada instrucción INSERT INTO MYTABLE ( NAME ) VALUES ( 'ABC' ); INSERTAR EN MITABLA ( NOMBRE ) VALORES ( '123' ); -- confirmar la transacción COMMIT TRAN ; END TRY BEGIN CATCH - revertir la transacción debido a un error ROLLBACK TRAN ; FINAL DE CAPTURA ;