Articulo de referencia

Transact-SQL

Transact-SQL ( T-SQL ) es una extensión propietaria de Microsoft y Sybase del lenguaje SQL (Structured Query Language) que se utiliza para interactuar con bases de datos relacio...

Transact-SQL ( T-SQL ) es una extensión propietaria de Microsoft y Sybase del lenguaje SQL (Structured Query Language) 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 , diversas funciones de soporte para el procesamiento de cadenas, fechas, operaciones matemáticas, etc., y modificaciones en las sentencias 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.

Variables

Transact-SQL proporciona las siguientes instrucciones para declarar y establecer variables locales: DECLARE, SETy SELECT.

DECLARE @var1 NVARCHAR ( 30 ); SET @var1 = 'Some Name' ; SELECT @var1 = Name FROM Sales . Store WHERE CustomerID = 100 ;

Control de flujo

Las palabras clave para el control de flujo en Transact-SQL incluyen BEGINy END, BREAK, CONTINUE, GOTO, IFy ELSE, RETURN, WAITFOR, y WHILE.

IFy ELSEpermite 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 asume que el domingo está configurado como el primer día de la semana @@DATEFIRST).

SI DATEPART ( dw , GETDATE ()) = 7 O DATEPART ( dw , GETDATE ()) = 1 IMPRIMIR 'Es fin de semana.' ; SINO IMPRIMIR 'Es un día laborable.' ;

BEGINy ENDmarca un bloque de instrucciones . Si más de una instrucción debe ser controlada por la condición del ejemplo anterior, podemos usar BEGINy ENDde 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 ; SINO BEGIN PRINT 'Es un día laborable.' ; PRINT '¡Ve a trabajar un día laborable!' ; END ;

WAITFOREsperará un tiempo determinado o hasta una hora específica del día. Esta instrucción se puede usar para retrasar la ejecución o para bloquearla hasta la hora establecida.

RETURNSe utiliza para regresar inmediatamente de un procedimiento o función almacenada .

BREAKfinaliza el WHILEbucle que lo contiene, mientras CONTINUEque hace que se ejecute la siguiente iteración del bucle. WHILEA continuación se muestra un ejemplo de bucle.

DECLARE @i INT ; SET @i = 0 ;MIENTRAS @i < 5 COMIENZA IMPRIMIR 'Hola mundo.' ; ESTABLECER @i = @i + 1 ; FIN ;

Cambios en las sentencias DELETE y UPDATE.

En Transact-SQL, tanto las sentencias DELETEAND como UPDATElas sentencias se mejoran para permitir el uso de datos de otra tabla en la operación, sin necesidad de una subconsulta:

  • DELETEacepta tablas unidas en la FROMcláusula, de forma similar a SELECT. Cuando se hace esto, el nombre o alias de la tabla de la unión que se va a eliminar se coloca entre DELETEy FROM.
  • UPDATEPermite FROMagregar una cláusula. La tabla que se va a actualizar puede unirse en la FROMcláusula y referenciarse mediante un alias, o referenciarse solo al inicio de la instrucción, como en SQL estándar.

Este ejemplo elimina a todos userslos que hayan sido marcados en la user_flagstabla con la etiqueta 'inactivo'.

DELETE u FROM users AS u INNER JOIN user_flags AS f ON u . id = f . id WHERE f . name = 'idle' ;

INSERTO A GRANEL

BULKEs una instrucció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. Su uso BULK INSERTofrece un mejor rendimiento que los procesos que emiten INSERTinstrucciones individuales para cada fila que se va a agregar. Puede encontrar más detalles en MSDN .

INTENTA ATRAPAR

A partir de SQL Server 2005, [ 1 ] Microsoft introdujo TRY CATCHlógica adicional para admitir el comportamiento de tipo excepción. Este comportamiento permite a los desarrolladores simplificar su código y omitir @@ERRORla comprobación después de cada instrucción SQL ejecutada.

-- iniciar transacción BEGIN TRAN ;COMIENZA INTENTAR -- ejecutar cada instrucción INSERTAR EN MI TABLA ( NOMBRE ) VALORES ( 'ABC' ); INSERTAR EN MI TABLA ( 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 ;

Véase también

Referencias

  1. "Mejoras de T-SQL en SQL Server 2012" , Jonathan Allen, 19 de marzo de 2012, infoq.com
  • Referencia de Transact-SQL
  • Tutorial de Transact-SQL