random

21/02/2005 - 20:54 por Luis Cejas | Informe spam
Muy buenas grupo,
Tengo un problema, hago un Insert que pueden ser entre 1 a 100 registros mas
o menos, el asunto es que uno de los datos que agrego es el código de
registro que es 6 caracteres alfabéticos únicos (una especie de Identity)
Hice una función que devuelve los 6 caracteres, y la llamdo :
Insert dbo.Tabla1 (campo1, campo2, campo3)
Select "valor1", "Valor2",
dbo.CreoCodigo(rand(),rand(),rand(),rand(),rand(),rand()) from tabla2

Como sabrán, el Rand() no lo puedo poner dentro de la función por eso la
llamo desde afuera, el problema es la función de devuelve exactamente el
mísmo código para todos los registros de Tabla2.

Antes yo hacía un bucle y llamaba a la función registro por registro, yo no
veo otra sulución que volver al famoso estilo dBase (while not eof()
...gotop y skeep, skeep.)
Pensar que despotricaba contra Ashton Tate. jajajaj
 

Leer las respuestas

#1 Jorge Bustos
22/02/2005 - 00:02 | Informe spam
El problema es que los rand() se te ejecutan una sola vez, al principio, y
se utiliza el mismo valor repetidamente.

¿Algún motivo especial para no usar GUIDs o identities? ¿Alguna posibilidad
de aleatorizar pasando valor1 o valor2, o alguna combinación de ellos con
rand() en vez de los rand()?

Te recomiendo que eches un vistazo a los libros en línea sobre rand porque
verás que tu enfoque desgraciadamente no es válido...incluso con un bucle.

Creo que la mejor idea es la que se me ha ocurrido la última: utiliza
NEWID() para generar tu código aleatorio (y de paso garantizas una mejor
aleatoreidad).

Es decir
Insert dbo.Tabla1 (campo1, campo2, campo3)
Select "valor1", "Valor2",
dbo.CreoCodigo(newid()) from tabla2



Obviamente debes cambiar CreoCodigo.

Espero que el último enfoque resuelva tu problema.

"Luis Cejas" wrote in message
news:
Muy buenas grupo,
Tengo un problema, hago un Insert que pueden ser entre 1 a 100 registros


mas
o menos, el asunto es que uno de los datos que agrego es el código de
registro que es 6 caracteres alfabéticos únicos (una especie de Identity)
Hice una función que devuelve los 6 caracteres, y la llamdo :
Insert dbo.Tabla1 (campo1, campo2, campo3)
Select "valor1", "Valor2",
dbo.CreoCodigo(rand(),rand(),rand(),rand(),rand(),rand()) from tabla2

Como sabrán, el Rand() no lo puedo poner dentro de la función por eso la
llamo desde afuera, el problema es la función de devuelve exactamente el
mísmo código para todos los registros de Tabla2.

Antes yo hacía un bucle y llamaba a la función registro por registro, yo


no
veo otra sulución que volver al famoso estilo dBase (while not eof()
...gotop y skeep, skeep.)
Pensar que despotricaba contra Ashton Tate. jajajaj


Preguntas similares