lunes, 28 de marzo de 2011

Hacer que un procedimiento espere

Para que un procedimiento o un codigo tsql se espere un tiempo o bien espere a una hora determinada para continuar:

waitfor time '12:00:00' ( no continuara hasta la hora indicada)
waitfor delay '00:00:01' (esperara un segundo a continuar)

martes, 22 de marzo de 2011

Obtener información procedimientos

Habitualmente me surge la necesidad, de comparar los procedimientos existentes en varios entornos de una misma base de datos. Hemos subido a producción ese procedimiento? como puede ser que el mismo procedimiento en dos entornos diferentes produzca error ?.

A todos esto encontré solución con el TOAD para SQL SERVER, esta aplicación incorpora una utilidad "schema compare". Hasta aquí genial... salvo el momento de migrar a 2008 ups la versión que tengo de TOAD no me vale, como lo soluciono? compro una nueva versión?

La verdad es que siempre he sido partidario de tener mis propias utilidades (es lo que tiene ser programador ;) ), así que necesitaba obtener de alguna forma el código tsql de los procedimientos almacenados en mi bdd, para compararlos con los del otro entorno. De esta necesidad he encontrado la siguiente consulta :

SELECT *
FROM sys.sql_modules
JOIN sys.objects ON sys.sql_modules.object_id = sys.objects.object_id AND TYPE = 'P';


El resultado incluye todas las propiedades necesarias para realizar esta validación. El código incluido, el nombre, la fecha de alta, la de última modificación etc etc...

Francamente muy útil.

lunes, 10 de enero de 2011

Horizontalizacion con separadores

Permite convertir registros de múltiples filas en un solo campo con separadores.

SET NOCOUNT ON
DECLARE @listValues VARCHAR(8000)
DECLARE @delimeter VARCHAR(3)
SET @delimeter = ' ; '

CREATE TABLE #Table1 (FirstName varchar(10))
INSERT #Table1 VALUES ('Michiel')
INSERT #Table1 VALUES ('John')
INSERT #Table1 VALUES ('Smith')
INSERT #Table1 VALUES ('Peter')

SELECT @listValues = ISNULL(
@listValues + @delimeter + CAST(FirstName AS VARCHAR(8000)),
CAST(FirstName AS VARCHAR(8000))
)
FROM #Table1
ORDER BY FirstName

DROP TABLE #Table1

SELECT list = @listValues