Archivos de Categoría: SQL Server - Paginas 2

Rellenar con ceros a la izquierda en SQL Server

Esta es sencillita, para hacer que un string tenga un ancho fijo y relleno las posiciones de la izquierda con ceros. En este caso consiguiendo que la cadena tenga una longitud de 6


select REPLACE(STR(campo, 6), SPACE(1), '0') from table

Listar los bloqueos de una base de datos

Últimamente ando bastante liado y no he podido postear nada pero después de tener que pegarme con un Navision que bloqueaba una tabla y tiraba mi aplicación, he tenido que volver para poner la consulta de marras que he tenido que usar para listar los bloqueos de la base de datos en cuestión:

SELECT OBJECT_NAME(P.object_id) AS TableName, 
       L.resource_type, 
       L.resource_description
FROM sys.dm_tran_locks AS L 
INNER JOIN sys.partitions AS P 
ON L.resource_associated_entity_id = P.hobt_id

PD: A ver si ahora que me estoy liberando un poco de trabajo, puedo volver a postear con algo más de regularidad

Insertar o actualizar registro dependiendo de si existe o no

Uno operación típica dentro de un procedimiento es comprobar si existe un registro para actualizarlo y en caso contrario insertarlo. Esto al principio lo hacía de la siguiente forma:

IF EXISTS ( SELECT campo FROM tabla WHERE id = @id ) 
	UPDATE  tabla	SET     campo = @campo WHERE   id = @id
ELSE 
	INSERT  INTO tabla ( id, campo ) VALUES  ( @id, @campo )

Pero había que estar metiendo transacciones así que empecé a usar la opción de hacer la actualización directamente y comprobar las columnas afectadas, en el caso no haberlas, hacia la inserción.

UPDATE tabla SET campo = @campo WHERE id = @id
IF @@ROWCOUNT = 0
	INSERT  INTO tabla ( id, campo ) VALUES  ( @id, @campo )

Con esto seguimos teniendo que meter transacciones pero es más eficiente.

Pero desde la versión 2008 de SQL Server, podemos usar el merge que no se si será más efectivo de cara a rendimiento pero sí que quedaremos más “pofesionales”.

MERGE INTO tabla 
USING (VALUES (@id, @campo)) AS tmp (id, campo) ON campo.id = tmp.id
WHEN MATCHED THEN
   UPDATE SET campo = tmp.campo
WHEN NOT MATCHED THEN   
   INSERT (id, campo) VALUES (tmp.id, tmp.campo);