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 originalCREATE PROCEDURE SP_TipoTel
@TipoTel_IDTipoTel INT,
@TipoTel_Descripcion NVARCHAR(50),
@error INT
AS
BEGIN SET @error = 1
IF ((LEN(@TipoTel_IDTipoTel) > 0) AND (LEN(@TipoTel_Descripcion) > 0))
BEGIN SET @error = 2
IF((SELECT COUNT(*) FROM TipoTel WHERE (ID_TipoTel = @TipoTel_IDTipoTel)) = 0)
BEGIN SET @error = 4
IF((SELECT COUNT(*) FROM TipoTel WHERE (Descripcion = @TipoTel_Descripcion)) = 0)
BEGIN SET @error = 0
INSERT INTO TipoTel VALUES (@TipoTel_IDTipoTel, @TipoTel_Descripcion)
END
END
END
IF (@error > 0)
BEGIN
EXEC Mensaje @error
END
END
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 originalCREATE PROCEDURE SP_EmpleadoTipoTel
@EmpleadoTipoTel_IDTipoTel INT,
@EmpleadoTipoTel_IDEmpleado INT,
@EmpleadoTipoTel_IDSucursal INT,
@EmpleadoTipoTel_Telefono NVARCHAR(50),
@error INT
AS
BEGIN SET @error = 1
IF((LEN(@EmpleadoTipoTel_IDTipoTel) > 0) AND (LEN(@EmpleadoTipoTel_IDEmpleado) > 0) AND
(LEN(@EmpleadoTipoTel_IDSucursal) > 0) AND (LEN(@EmpleadoTipoTel_Telefono) > 0))
BEGIN SET @error = 2
-- aquí es la parte de la validación de la llave primaria compuesta
--(¿alguna sugerencia de validar esto usando IF?)la llave primaria
--esta compuesta por:
-- @EmpleadoTipoTel_IDTipoTel,(ID_TipoTel)
-- @EmpleadoTipoTel_IDEmpleado,(ID_Empleado)
-- @EmpleadoTipoTel_IDSucursal,(ID_Sucursal)
-- lo encerrado en () son los nombres de los campos en las tablas
BEGIN SET @error = 3
IF((SELECT COUNT(*) FROM Empleado WHERE (ID_Empleado = @EmpleadoTipoTel_IDEmpleado)) != 0 AND
(SELECT COUNT(*) FROM Sucursal WHERE (ID_Sucursal = @EmpleadoTipoTel_IDSucursal)) != 0)
BEGIN
INSERT INTO Empleado_TipoTel
VALUES (@EmpleadoTipoTel_IDTipoTel, @EmpleadoTipoTel_IDEmpleado,
@EmpleadoTipoTel_IDSucursal, @EmpleadoTipoTel_Telefono)
SET @error = 0
END
END
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 originalIF((SELECT COUNT(*) FROM Empleado WHERE
((ID_TipoTel = @EmpleadoTipoTel_IDTipoTel) AND
(ID_Empleado = @EmpleadoTipoTel_IDEmpleado) AND
(ID_Sucursal = @EmpleadoTipoTel_IDSucursal))) != 0)