Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/03/2012, 17:23
iPaNiiCx
 
Fecha de Ingreso: junio-2011
Ubicación: Mexicali, BC
Mensajes: 17
Antigüedad: 12 años, 9 meses
Puntos: 0
Validacion de llave primaria compuesta con IF

Buenos dias a todos, les escribo para mostrarles un problema que tengo o mas bien no se realizar acerca de validar una llave primaria compuesta. Estoy realizando Stored Procedures para validar que los datos ingresados en una tabla sean correctos antes de mandar hacer el INSERT, quiero saber si existe una forma de validar esto.

Les pongo un ejemplo de uno de los stored procedures ya realizado(llave primaria simple)

Código SQL:
Ver original
  1. CREATE PROCEDURE SP_TipoTel
  2. @TipoTel_IDTipoTel   INT,
  3. @TipoTel_Descripcion NVARCHAR(50),
  4. @error               INT
  5. AS
  6. BEGIN SET @error = 1
  7.     IF ((LEN(@TipoTel_IDTipoTel) > 0) AND (LEN(@TipoTel_Descripcion) > 0))
  8.     BEGIN SET @error = 2
  9.         IF((SELECT COUNT(*) FROM TipoTel WHERE (ID_TipoTel = @TipoTel_IDTipoTel)) = 0)
  10.         BEGIN SET @error = 4
  11.             IF((SELECT COUNT(*) FROM TipoTel WHERE (Descripcion = @TipoTel_Descripcion)) = 0)
  12.             BEGIN SET @error = 0
  13.                 INSERT INTO TipoTel VALUES (@TipoTel_IDTipoTel, @TipoTel_Descripcion)
  14.             END
  15.         END
  16.     END
  17. IF (@error > 0)
  18. BEGIN
  19.     EXEC Mensaje @error
  20. END
  21. END
  22. GO

Las validaciones son para que en caso de que existan errores como (valoresnulos(1)>llaveprimariarepetida(2)>llavefor anearepetida(3)>llavealternarepetida(4)) en caso de ser uno de esos se manda llamar un stored procedure que imprime un mensaje con el error.

Ahora lo que yo quiero es validar de la misma manera que arriba una llave primaria compuesta, este es el SP:

Código SQL:
Ver original
  1. CREATE PROCEDURE SP_EmpleadoTipoTel
  2. @EmpleadoTipoTel_IDTipoTel  INT,
  3. @EmpleadoTipoTel_IDEmpleado INT,
  4. @EmpleadoTipoTel_IDSucursal INT,
  5. @EmpleadoTipoTel_Telefono   NVARCHAR(50),
  6. @error                      INT
  7. AS
  8. BEGIN SET @error = 1  
  9.     IF((LEN(@EmpleadoTipoTel_IDTipoTel) > 0) AND (LEN(@EmpleadoTipoTel_IDEmpleado) > 0) AND
  10.     (LEN(@EmpleadoTipoTel_IDSucursal) > 0) AND (LEN(@EmpleadoTipoTel_Telefono) > 0))
  11.     BEGIN SET @error = 2
  12.  
  13. -- aquí es la parte de la validación de la llave primaria compuesta
  14. --(¿alguna sugerencia de validar esto usando IF?)la llave primaria
  15. --esta compuesta por:
  16. --  @EmpleadoTipoTel_IDTipoTel,(ID_TipoTel)
  17. --             @EmpleadoTipoTel_IDEmpleado,(ID_Empleado)
  18. --             @EmpleadoTipoTel_IDSucursal,(ID_Sucursal)
  19. -- lo encerrado en () son los nombres de los campos en las tablas
  20.         BEGIN SET @error = 3
  21.             IF((SELECT COUNT(*) FROM Empleado WHERE (ID_Empleado = @EmpleadoTipoTel_IDEmpleado)) != 0 AND
  22.             (SELECT COUNT(*) FROM Sucursal WHERE (ID_Sucursal = @EmpleadoTipoTel_IDSucursal)) != 0)
  23.            
  24.         BEGIN
  25.             INSERT INTO Empleado_TipoTel
  26.             VALUES (@EmpleadoTipoTel_IDTipoTel, @EmpleadoTipoTel_IDEmpleado,
  27.             @EmpleadoTipoTel_IDSucursal, @EmpleadoTipoTel_Telefono)
  28.             SET @error = 0
  29.         END
  30. END
  31. GO

Cualquier cosa que no se entienda, aqui estare checando para responder.

Espero alguien me pueda echar la mano con eso, incluso si hay sugerencias o mejoras o otros puntos de vista para realizar esto son tambien bienvenidos.

Muchas gracias de antemando, saludos.

---------------------

Bueno encontre mi respuesta, bastante simple que hasta verguenza me da xD
Código SQL:
Ver original
  1. IF((SELECT COUNT(*) FROM Empleado WHERE
  2. ((ID_TipoTel = @EmpleadoTipoTel_IDTipoTel) AND
  3. (ID_Empleado = @EmpleadoTipoTel_IDEmpleado) AND
  4. (ID_Sucursal = @EmpleadoTipoTel_IDSucursal))) != 0)

Última edición por iPaNiiCx; 15/03/2012 a las 16:42