Actualizar filas de una tabla con hora aleatoria.

10/01/2007 - 10:27 por Salvador Ramos | Informe spam
Hola a todos,

Por un error en una aplicación, se han generado una serie de filas con una
columna hora (char(4)) con el valor '', ahora necesito actualizar esas filas
con una hora generada de forma aleatoria. Y ahí es donde tengo el problema,
ya que no consigo generar estos valores.

En primer lugar he intentado lo siguiente:
select right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE()) *
100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 24 as int) as char(2))), 2) +
right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 60 as int) as char(2))), 2) as aleatorio,*
from MiTabla
where hora = ''

El problema es que me genera un solo valor aleatorio para toda la
instrucción select. Luego he decidido hacer una función que devuelva una
hora aleatoria:
create function dbo.HoraAleatoria()
returns char(4)
as
begin
return( select right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE())
* 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 24 as int) as char(2))), 2) +
right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 60 as int) as char(2))), 2)
)
end
GO

Pero me indica que el siguiente error:
Uso no válido de operador con efectos secundarios o dependiente del tiempo
en 'rand' dentro de una función.

Además si ejecuto la función muy seguido me da horas muy similares o
idénticas.

Alguien me puede ayudar a generar estas horas de forma aleatoria para cada
una de las filas ?

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server / MCTS: SQL Server 2005]
www.helpdna.net (información sobre SQL Server y .NET)
 

Leer las respuestas

#1 Carlos Sacristan
10/01/2007 - 11:31 | Informe spam
Pues mira, a riesgo de que la brigada anti-cursores venga a por mí, creo
que la mejor solución en tu caso sería usando uno (un cursor, ya sea
declarado explícitamente o mediante un WHILE) y entonces ir actualizando uno
a uno esos registros calculando previamente la fecha que le quieres asignar.
Total, es algo que no lo vas a hacer todos los días, no?

La fórmula para generar esa fecha aleatoria ya la dejo a tu
imaginación...

"Salvador Ramos" escribió en el
mensaje news:
Hola a todos,

Por un error en una aplicación, se han generado una serie de filas con una
columna hora (char(4)) con el valor '', ahora necesito actualizar esas
filas con una hora generada de forma aleatoria. Y ahí es donde tengo el
problema, ya que no consigo generar estos valores.

En primer lugar he intentado lo siguiente:
select right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE()) *
100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 24 as int) as char(2))), 2) +
right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 60 as int) as char(2))), 2) as aleatorio,*
from MiTabla
where hora = ''

El problema es que me genera un solo valor aleatorio para toda la
instrucción select. Luego he decidido hacer una función que devuelva una
hora aleatoria:
create function dbo.HoraAleatoria()
returns char(4)
as
begin
return( select right(rtrim('00' + cast(cast( RAND( (DATEPART(mm,
GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 24 as int) as char(2))), 2) +
right(rtrim('00' + cast(cast( RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * 60 as int) as char(2))), 2)
)
end
GO

Pero me indica que el siguiente error:
Uso no válido de operador con efectos secundarios o dependiente del tiempo
en 'rand' dentro de una función.

Además si ejecuto la función muy seguido me da horas muy similares o
idénticas.

Alguien me puede ayudar a generar estas horas de forma aleatoria para cada
una de las filas ?

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server / MCTS: SQL Server 2005]
www.helpdna.net (información sobre SQL Server y .NET)



Preguntas similares