Código de SQL - Ejecutar un proceso cada segundo exacto en sql server

Ejecutar un proceso cada segundo exacto en sql servergráfica de visualizaciones


SQL

Publicado el 17 de Diciembre del 2012 por Xebas Garcia
7.366 visualizaciones desde el 17 de Diciembre del 2012. Una media de 42 por semana
Query que muestra como ejecutar un proceso/instrucción cada segundo.

Básicamente, hay un contador (@c) que va a ir incrementando según un intervalo de tiempo (@time = @sec + 1 ) , en este caso 1 segundo (es el que aparece a la derecha de @sec) y lo limite a que el contador llegue a 5 (en el while, para no hacerlo tan grande pero puede hacerse un bucle infinito para que funcione como un reloj y funcione exactamente como lo es con el famoso "Timer" o "setInterval").

@sec: Es el segundo REAL, obtenido del servidor donde esté alojada la base de datos. ( GETDATE() )
@time: Es a donde tiene que llegar el segundero para poder cumplir la acción (es un select, pero por ejemplo puede expandirse con EXEC (@syntaxSql) para hacerlo más customizable)

Funciona en SQL Server 2000/2005/2008/2008 R2

Versión 1

Publicado el 17 de Diciembre del 2012gráfica de visualizaciones de la versión: Versión 1
7.369 visualizaciones desde el 17 de Diciembre del 2012. Una media de 42 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
declare @sec int --Segundos RELOJ!
 
declare @time int -- Cada cuanto queremos que se actualice el contador?
 
set @sec = convert(int,right(convert(varchar,GETDATE(),108),2)) -- Asigno los segundos reales
 
/*
	Yo quiero que se actualice el contador cada 1 segundo real.
	
	Si por ejemplo mi segundero va por 20 y yo quiero que se actualice mi contador cada 1 segundo entonces, 
	cuando el segundero llegue a 21 va a actualizarse.
*/
set @time = @sec + 1
 
 
declare @c int -- Declaro mi contador
set @c = 0 -- Seteo valor default en 0
 
while @c < 5 -- Mientras que mi contador sea menos a 10, va a ir incrementando en 1 cada 1 segundo.
	BEGIN
		if @sec = @time -- Si el segundero alcanzó los 3 segundos
			BEGIN
 
				-- Muestro el cartel
				select GETDATE(),'La cuenta incrementa cada 1 segundo! : ' + convert(varchar,@c + 1 )
 
				-- Como llegue a 1 segundo tengo que sumarle 1 mas a @time, para que continue la cuenta.
				set @time = (@time + 1)
 
				-- Incremento en 1 mi contador
				set @c = @c + 1
 
				-- Esto para el caso que el segundero alcance 59
				if @time >= 60
					BEGIN
						set @time = 0 -- Seteo en cero y cuando coincida volvera a sumar 1 y así sucesivamente!!
					END
			END
 
			set @sec = convert(int,right(convert(varchar,GETDATE(),108),2)) -- Actualizo segundero
	END



Comentarios sobre la versión: Versión 1 (0)


No hay comentarios
 

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s2265