Valor Predet desde un sp

29/05/2004 - 18:57 por Cristián | Informe spam
Hola!!
Alguien sabe como hago para dar un valor predeterminado a
un campo a partir de un sp. Si pongo execute NombreProc
por ejemplo lo toma como un literal y pone '' alrededor.
Particularmente quiero que se genere una clave aleatoria
de 8 dígitos automáticamente al insertar un nuevo
registro. De antemano GRACIAS...


(Por favor no quiero polemizar pero eviten respuestas del
tipo ¿por que no haces otra cosa mejor? porque evitan que
alguien que realmente tiene la respuesta y lo ha hecho me
responda... sin enojarse ya?)
 

Leer las respuestas

#1 Javier Loria
29/05/2004 - 21:56 | Informe spam
Hola:
Pues yo no lo haria asi, porque no haces mejor otra cosa:
Es broma :D
La unica forma de asignar un valor predeterminado usando un
procedimiento almacenado es usando un TRIGGER. :(
Si quieres que se genera una llave aleatoria, puedes usar :
***** PRECAUCION ******
CREATE TABLE NumerosAleatorios(
Llave INT NOT NULL PRIMARY KEY
, Aleatorio INT NOT NULL
DEFAULT (CAST(FLOOR(RAND()*100000000) AS INT))
)

***** PRECAUCION ******
Si usas esto con conjuntos y multiples inserts TODOS LOS NUMEROS seran
iguales, esto es ANTI-CONJUNTOS.
= -- Esto Funciona
INSERT NumerosAleatorios(Llave)
VALUES(1)
INSERT NumerosAleatorios(Llave)
VALUES(2)
INSERT NumerosAleatorios(Llave)
VALUES(3)
SELECT * FROM NumerosAleatorios
TRUNCATE TABLE NumerosAleatorios

INSERT NumerosAleatorios(Llave)
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3
SELECT * FROM NumerosAleatorios
= Eventualmente el TRIGGER podria tener un CURSOR :( que haga esta labor.
Pero esto seria menos que horriable.
Si la funcion NO tiene que ser EXTRICTAMENTE ALEATORIO, sino que puede
ser PSEUDOALEATORIA, puedes usas NEWID, hacer un par de CASTS y obtener el
resultado.
Algo como
=CREATE TABLE NumerosAleatorios(
Llave INT NOT NULL PRIMARY KEY
, Aleatorio BIGINT NOT NULL
DEFAULT (CAST(RIGHT(CAST(CAST(CAST(NEWID() AS BINARY(16)) AS BIGINT) AS
VARCHAR(20)),10) AS BIGINT))
CHECK (Aleatorio<10000000000)
)
= No debes usar esta tabla para fines estadisticos, unicamente comerciales
o de negocios.
Espero te sirva,
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Cristián escribio:
Hola!!
Alguien sabe como hago para dar un valor predeterminado a
un campo a partir de un sp. Si pongo execute NombreProc
por ejemplo lo toma como un literal y pone '' alrededor.
Particularmente quiero que se genere una clave aleatoria
de 8 dígitos automáticamente al insertar un nuevo
registro. De antemano GRACIAS...


(Por favor no quiero polemizar pero eviten respuestas del
tipo ¿por que no haces otra cosa mejor? porque evitan que
alguien que realmente tiene la respuesta y lo ha hecho me
responda... sin enojarse ya?)

Preguntas similares