Parametros predeterminados en Procedimientos Almacenados

18/09/2008 - 08:51 por Santiago Barro | Informe spam
Hola a todos,
toda nuestra aplicación inserta, actualiza, elimina y selecciona los datos
desde procedimientos almacenados.

Hemos querido optimizar nuestra aplicación y al guardar los datos, sólo
mandamos a los procedimientos los valores que realmente han cambiado.

El problema con el que nos encontramos es que al insertar nuevos registros,
no se respectan los valores predeterminados indicado en la tabla.

Por ejemplo:
Tenemos el siguiente proc. almacenado:

CREATE PROCEDURE [dbo].[Usuario_Insert]

@Clave varchar(10)=NULL,
@Alias varchar(12)=NULL,
@GrupoUsuario smallint=NULL,
@Password varchar(10)=NULL,
@PasswordFechaCaduca datetime=NULL

AS

INSERT INTO Usuario (
Clave,
Alias,
GrupoUsuario,
Password,
PasswordFechaCaduca,)
VALUES (
@Clave,
@Alias,
@GrupoUsuario,
@Password,
@PasswordFechaCaduca)


Bien, pues resulta que en la base de datos tenemos como valores
predeterminados: GrupoUsuario = 0 y PasswordFechaCaduca=getdate().
Si a este procedimiento sólo le pasamos los valores, por ejemplo, de
@Clave='NUEVO', todos los demás campos serán NULL.

Hemos pensado que existe una fácil solución que sería indicar también en el
proc. almacenado los valores predeterminados en lugar de valores NULL, pero
no podemos asignar la función getdate() por tener que ser un valor
constante.

¿Sabeis si existe alguna manera de poder indicar en los parámetros que si no
se indica ningún valor, coja el valor predeterminado de la base de datos en
lugar del valor NULL?.

Muchas gracias y un saludo
Santiago Barro
 

Leer las respuestas

#1 Juan Diego Bueno
18/09/2008 - 09:22 | Informe spam
Hola Santiago:
El 18/09/2008, Santiago Barro ha supuesto :
Hola a todos,
toda nuestra aplicación inserta, actualiza, elimina y selecciona los datos
desde procedimientos almacenados.

Hemos querido optimizar nuestra aplicación y al guardar los datos, sólo
mandamos a los procedimientos los valores que realmente han cambiado.

El problema con el que nos encontramos es que al insertar nuevos registros,
no se respectan los valores predeterminados indicado en la tabla.

Por ejemplo:
Tenemos el siguiente proc. almacenado:

CREATE PROCEDURE [dbo].[Usuario_Insert]

@Clave varchar(10)=NULL,
@Alias varchar(12)=NULL,
@GrupoUsuario smallint=NULL,
@Password varchar(10)=NULL,
@PasswordFechaCaduca datetime=NULL

AS

INSERT INTO Usuario (
Clave,
Alias,
GrupoUsuario,
Password,
PasswordFechaCaduca,)
VALUES (
@Clave,
@Alias,
@GrupoUsuario,
@Password,
@PasswordFechaCaduca)


Bien, pues resulta que en la base de datos tenemos como valores
predeterminados: GrupoUsuario = 0 y PasswordFechaCaduca=getdate().
Si a este procedimiento sólo le pasamos los valores, por ejemplo, de
@Clave='NUEVO', todos los demás campos serán NULL.

Hemos pensado que existe una fácil solución que sería indicar también en el
proc. almacenado los valores predeterminados en lugar de valores NULL, pero
no podemos asignar la función getdate() por tener que ser un valor constante.

¿Sabeis si existe alguna manera de poder indicar en los parámetros que si no
se indica ningún valor, coja el valor predeterminado de la base de datos en
lugar del valor NULL?.



Se me ocurre que deberías para ello generar un INSERT INTO dinámico que
insertara únicamente los valores que no son NULL. De esa forma te
respetaría los valores por defecto de la tabla. Tampoco veo problema en
indicar los valores predeterminados en vez de NULL, ya que dentro del
proc. almacenado sí puedes usarlos. Por ejemplo:

IF @GRUPOUSUARIO IS NULL THEN SET @GRUPOUSUARIO=VALORPORDEFECTO
IF @PASSWORDFECHACADUCA IS NULL THEN SET @PASSWORDFECHACADUCA=GETDATE()
...
INSERT INTO...

Saludos

http://www.moondance.es

Preguntas similares