Introducción
Incluso si usted es un veterano de SQL, en verdad, especialmente si lo es, usted a veces se estanca haciendo algo de la manera antigua sin darse cuenta que en versiones más nuevas de SQL Server algunas funciones prácticas han sido añadidas y pueden hacer su vida más fácil.
En este artículo, mencionaré un par de funciones que aparecieron en SQL Server 2008 o versiones posteriores o que pueden haber estado ahí pero la mayor parte de la gente simplemente no sabía de ellas.
Condición lógica
En lenguajes de programación regulares, como VB o C#, usted ha podido usar la sentencia IF por largo tiempo. Usted incluso puede usar esto en Excel. Pero en SQL usted siempre tuvo que usar IF..ELSE o un CASE para realizar una operación de condición lógica.
Usted puede ahora usar esto en SQL Server. Por ejemplo:
1 2 3 |
DECLARE @SON varchar(20) = 'LUKE' SELECT IIF(@SON = 'LUKE', 'I AM YOUR FATHER', 'I AM NOT YOUR FATHER') |
El primer parámetro es la condición, el segundo parámetro es lo que será retornado si la condición es verdadera y el tercer parámetro es lo que será retornado si la condición es falsa.
En este caso el resultado será como sigue:
Concatenación
Puede que muchos de ustedes piensen que esto no es un gran problema, usted ya puede hacer concatenación de cadenas usando esta sintaxis aquí.
1 |
Select name + '''s birthday was ' + birthdate from person |
Pero por supuesto hay un error.
Para que esto funcione, usted tendrá que realizar una conversión explícita de la fecha como sigue:
1 |
Select name + '''s birthday was ' + CONVERT(VARCHAR(12),birthdate,113) from person |
Lo que retornará:
Lo que es bueno acerca de la función CONCAT es que hace la conversión implícita. Así que usted no tiene que convertir a una cadena antes de añadirla.
1 |
SELECT CONCAT(name, '''s birthday was ', birthdate) FROM person |
La función CONCAT puede concatenar hasta 255 caracteres. Null es convertido a una cadena vacía.
Operadores compuestos
Usted ha usado operadores compuestos en otros lenguajes desde siempre. En estos operadores, usted puede simplemente declarar el parámetro y el incremento o decremento con un número en un solo comando.
1 2 3 |
int cnt = 0; cnt += 2; Console.WriteLine("The count is: {0}",cnt); |
Pero en SQL usted tenía que asignar la variable y su incremento de vuelta a la variable.
1 2 3 4 5 6 7 8 |
DECLARE @cnt int = 0 WHILE @cnt < 10 BEGIN PRINT @cnt SELECT @cnt = @cnt + 1 END GO |
Pero ahora, desde SQL Server 2008 en adelante, usted puede usar los operadores compuestos para establecer un valor original al resultado de la expresión.
1 2 3 4 5 6 7 8 |
DECLARE @cnt int = 0 WHILE @cnt < 10 BEGIN PRINT @cnt SELECT @cnt+=2; END GO |
Los siguientes operadores compuestos están disponibles:
+= | Añade el valor al valor original y establece el nuevo valor al resultado. |
-= | Substrae el valor original y establece el valor original al resultado. |
*= | Multiplica por una cantidad y establece el valor original al resultado. |
/= | Divide por una cantidad y establece el valor original al resultado. |
%= | Divide por una cantidad y establece el valor original al módulo. |
&= | Realiza un AND bit a bit y establece el valor original al resultado. |
^= | Realiza un OR exclusive bit a bit y establece el valor original al resultado. |
|= | Realiza un OR bit a bit y establece el valor original al resultado. |
Insertar múltiples filas con un comando INSERT
El Constructor de Valor de Tabla
Por años usted tenía que crear un comando para cada fila que deseaba insertar. A menos que estuviese usando un SELECT INTO, su comando típicamente tenía que verse así:
1 2 3 4 5 6 7 |
CREATE TABLE items (item_id int, item_name varchar(10)) INSERT INTO items VALUES (1,'Hat') INSERT INTO items VALUES (2,'Sock') INSERT INTO items VALUES (3,'Shoe') INSERT INTO items VALUES (4,'Coat') INSERT INTO items VALUES (5,'Shirt') |
Esto ahora ha sido hecho algo más fácil, permitiéndole no tener que repetir la porción INSERT INTO del comando, pero sólo especifique los valores que le gustaría insertar usando el Constructor de Valor de Tabla. Así:
1 2 3 4 5 |
INSERT INTO items VALUES (1,'Hat'), (2,'Sock'), (3,'Shoe'), (4,'Coat'), (5,'Shirt') |
Usted también puede especificar una consulta como un valor, pero tiene que retornar un valor escalar como este:
1 2 3 4 5 6 |
INSERT INTO items VALUES (1,'Hat'), (2,'Sock'), (3,'Coat'), (4, (select name from product where product_id = 10)) GO |
El constructor de valor de tabla está limitado a 1000 filas.
El Replicador de Lotes
Usted también tiene la opción de insertar la misma fila múltiples veces usando la opción de replicador de lotes del separador de lotes.
El separador de lotes es GO por defecto. El propósito de este comando es separar el código en un script en lotes. Como este:
1 2 3 4 |
USE AdventureWorks2012 GO INSERT INTO items VALUES (1,'Hat') GO |
En este ejemplo, USE Adventureworks2012 es el primer lote y el comando INSERT es el segundo lote.
Así que, si usted deseaba añadir la misma fila a la tabla múltiples veces, usted puede especificar un número de veces que debería ser ejecutada, así:
1 2 3 |
--Insert 1 row 10 times INSERT INTO items VALUES (1,'Hat') GO 10 |
En este caso, la misma fila será insertada 10 veces. Puede que no parezca muy útil, pero es muy práctico si usted tiene que generar cantidades grandes de datos para pruebas de desempeño, etc. Por supuesto, su lote no necesita ser tan simple como este ejemplo, usted puede modificarlo para insertar datos con diferentes tipos de datos y valores derivados para crear datos de ejemplo de alta calidad.
Vale la pena notar que el lote separado realmente NO es transact-SQL, es un comando interpretado por sqlcmd, osql o SQL Server Management Studio.
Cuando SQL Server Management Studio encuentra un GO, sabe que necesita enviar el lote precedente de código a la instancia SQL Server. Usando el replicador, simplemente le dice a la utilidad que envía el lote múltiples veces.
Template explorer
SQL Server está equipado con una gran cantidad de plantillas para comando comunes, lo que le permite obtener la sintaxis correcta para realizar una cierta tarea sin tener que buscarlo en Google. Esto está integrado en SQL Server Management Studio y puede ser visto en el explorador de plantillas.
Usted puede acceder al Explorador de Plantillas (Template Explorer) desde el menú View:
Esto abrirá la ventana Template Browser, la cual muestra todas las plantillas disponibles.
También le permite crear sus propias plantillas, lo cual es realmente práctico si usted tiene scripts que usa frecuentemente. Usted puede crear sus propias plantillas haciendo clic derecho en el nodo SQL Server Templates en Template Browser y seleccionando la opción New. Usted puede entonces crear una nueva carpeta o una nueva plantilla.
Conclusión
SQL Server tiene una miríada de herramientas y funciones que la mayor parte de la gente no conoce. Estas son sólo un par de cosas con las que me topé, pero hay seguramente muchas más. Vale definitivamente la pena a veces simplemente jugar un poco y ver si uno se topa con algo que no ha visto antes, especialmente para versiones nuevas, ya que SQL Server y el lenguaje Transact-SQL siempre están mejorando.
Referencias
- Definición y descripción general interbloqueo de SQL Server - December 16, 2019
- 5 consejos prácticos de Transact-SQL que puede usted conozca (o no) - December 24, 2016
- Creando una estrategia de auditoría exitosa para sus bases de datos SQL Server - October 29, 2016