Ayuda con validación en un sp

08/03/2006 - 17:06 por Omar | Informe spam
Que tal buen día, nuevamente recurro a ustedes ya que se me presentó el
siguiente problema.

Tengo una tabla con los siguientes campos id_extension, usuario, clave,
descripcion, en el campo clave puede contener NULL o algún valor, pero
si introduzco un valor a este campo necesito que sea único y mi problema
radica en que cuando quiero hacer una actualización de determinado
registro ha algún otro campo que no sea el campo clave no me permite
hacer la actualización ya que la clave ya existe y no me permite hacer
el update, como puedo solucionar este problema de validación?

a continuación expongo el sp que utilizo para el update.


CREATE PROCEDURE dbo.sp_ModificaExtension
@id_extension int,
@usuario varchar (50),
@clave int,
@descripcion varchar (50),
@id_ccostos int,
@tipo_servicio varchar (5),
@desc_tipo_servicio varchar (50),
@id_ext int

AS
DECLARE @ErrorSave INT
SET @ErrorSave = 0

IF NOT EXISTS (select clave from extension where clave=@clave)
BEGIN
UPDATE extension SET
id_extension=@id_extension,
usuario=@usuario,
clave=@clave,
descripcion=@descripcion,
id_ccostos=@id_ccostos,
tipo_servicio= @tipo_servicio,
desc_tipo_servicio=@desc_tipo_servicio
WHERE id_extension=@id_ext
END

IF (@@ERROR <> 0) --Si hay error
SET @ErrorSave = @@ERROR
GO

Muchas gracias por cualquier ayuda.
 

Leer las respuestas

#1 Alejandro Mesa
09/03/2006 - 17:42 | Informe spam
Omar,

Siempre recomiendo que para este tipo de preguntas se postee la estructura
de la tabla. Cual es la clva eprimaria de esta tabla?

Existen varias formas de forzar valores unicos en un columna que permite
null, la una mediante una vista indexada y la otra mediante el uso de una
columna calculada (esta version me gusta mas).

Ejemplo:

create table t1(
c1 int not null identity unique,
c2 varchar(10) null,
c3 as case when c2 is null then ltrim(c1) else c2 end unique
)
go

insert into t1 default values
insert into t1 default values
go

insert into t1(c2) values('a')
insert into t1(c2) values('b')
go

insert into t1 default values
insert into t1 default values
go

select *
from t1

update t1
set c2 = 'a'
where c1 = 4
go

select *
from t1
go

drop table t1
go


AMB


"Omar" wrote:

Que tal buen día, nuevamente recurro a ustedes ya que se me presentó el
siguiente problema.

Tengo una tabla con los siguientes campos id_extension, usuario, clave,
descripcion, en el campo clave puede contener NULL o algún valor, pero
si introduzco un valor a este campo necesito que sea único y mi problema
radica en que cuando quiero hacer una actualización de determinado
registro ha algún otro campo que no sea el campo clave no me permite
hacer la actualización ya que la clave ya existe y no me permite hacer
el update, como puedo solucionar este problema de validación?

a continuación expongo el sp que utilizo para el update.


CREATE PROCEDURE dbo.sp_ModificaExtension
@id_extension int,
@usuario varchar (50),
@clave int,
@descripcion varchar (50),
@id_ccostos int,
@tipo_servicio varchar (5),
@desc_tipo_servicio varchar (50),
@id_ext int

AS
DECLARE @ErrorSave INT
SET @ErrorSave = 0

IF NOT EXISTS (select clave from extension where clave=@clave)
BEGIN
UPDATE extension SET
id_extension=@id_extension,
usuario=@usuario,
clave=@clave,
descripcion=@descripcion,
id_ccostos=@id_ccostos,
tipo_servicio= @tipo_servicio,
desc_tipo_servicio=@desc_tipo_servicio
WHERE id_extension=@id_ext
END

IF (@@ERROR <> 0) --Si hay error
SET @ErrorSave = @@ERROR
GO

Muchas gracias por cualquier ayuda.

Preguntas similares