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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 MAXI
22/02/2005 - 00:03 | Informe spam
Hola, a ver ese radon que hace? o sea vos queres que numere automaticamente?
porque si queres esto

1
2
3

de forma automatica no debes usar asi la funcion, sino que debes ver que
este referenciado a la fila, mira te muestro un simple ejemplo que quizas te
pueda orientar

==
CREATE TABLE #PEPE (NOMBRE VARCHAR(30) PRIMARY KEY)

INSERT INTO #PEPE VALUES ('MAX')
INSERT INTO #PEPE VALUES ('FEDE')
INSERT INTO #PEPE VALUES ('JUAN')

SELECT T1.NOMBRE, COUNT(*) AS NUMERO FROM #PEPE T1 INNER JOIN #PEPE T2 ON
T1.NOMBRE >= T2.NOMBRE
GROUP BY T1.NOMBRE


=




Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

MSN:



"Luis Cejas" escribió en el mensaje
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


Respuesta Responder a este mensaje
#3 Luis Cejas
22/02/2005 - 15:34 | Informe spam
Te explico,
el código se usa para referenciar órdenes de trabajo, o sea tiene que ser
ÚNICO.
los trabajos se cargan en una tabla temporal y luego, tras la confirmación,
se vuelca a la tabla REAL, y es ahí tras la confirmación donde tiene que
adquirir el código aleatorio.
El código tiene que ser Alfa de 6 caacteres y, por ende, tras la generación
tengo que validad que no exista ya en la tabla REAL. El problema lo tengo
porque cuando lo valido dentro de la función CreoCodigo puede dar la
casualidad que previamente ya lo generé ese mismo codigo pero al no haberse
grabado todavia (puesto que estoy en un insert . select...) me de una
validación erronea.
El NewId() está perfecto pero cuando valido dentro de la función me
encuentro con ese mismo problema.

Espero haber sido explícito,
Luis





"Jorge Bustos" wrote in message
news:
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
>
>


Respuesta Responder a este mensaje
#4 Jorge Bustos
24/02/2005 - 01:30 | Informe spam
No sé si te he entendido muy bien, pero te aconsejo que veas la información
sobre los triggers (desencadenadores) INSTEAD OF INSERT. Estos te permiten
realizar comprobaciones antes de insertar valores en una tabla. Este trigger
deberías definirlo para tu tabla REAL, y controlar desde el trigger que los
valores insertados no existen. En caso de existir te aconsejo que uses
newid() para tratar de generar valores (tendrás que realizar un tratamiento
adicional sobre el valor devuelto para convertirlo en el código alfa 6 que
necesitas).

Salu2,
Jorge

"Luis Cejas" wrote in message
news:%
Te explico,
el código se usa para referenciar órdenes de trabajo, o sea tiene que ser
ÚNICO.
los trabajos se cargan en una tabla temporal y luego, tras la


confirmación,
se vuelca a la tabla REAL, y es ahí tras la confirmación donde tiene que
adquirir el código aleatorio.
El código tiene que ser Alfa de 6 caacteres y, por ende, tras la


generación
tengo que validad que no exista ya en la tabla REAL. El problema lo tengo
porque cuando lo valido dentro de la función CreoCodigo puede dar la
casualidad que previamente ya lo generé ese mismo codigo pero al no


haberse
grabado todavia (puesto que estoy en un insert . select...) me de una
validación erronea.
El NewId() está perfecto pero cuando valido dentro de la función me
encuentro con ese mismo problema.

Espero haber sido explícito,
Luis





"Jorge Bustos" wrote in message
news:
> 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 porq


ue
> 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
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida