Puedes mandar 2 parametros a tu stored procedure (inicializados a un valor default). Si tienes problemas para entender la clausula where, avísame.
Código SQL:
Ver originalALTER PROCEDURE [dbo].[obtenerhorariopersonalcargo]
@nombre VARCHAR(50) = NULL,
@dni INT = 0
AS
SELECT (p.nombre +' '+ p.apellido)AS nombres, c.nombre, p.foto, d.descripcion, hpc.h_entrada, hpc.m_entrada, hpc.h_salida, hpc.m_salida,c.horas,p.nro FROM personal p
INNER JOIN personalcargos pc ON p.id_personal = pc.id_personal
INNER JOIN cargos c ON pc.id_cargo = c.id_cargo
INNER JOIN horariopersonalcargos hpc ON c.id_cargo = hpc.id_cargo
INNER JOIN dias d ON hpc.dia = d.dia
WHERE (@nombre IS NOT NULL AND (p.apellido +' '+ p.nombre)=@nombre)
OR
(@dni > 0 AND @dni= p.nro)
Cuando mandes llamar el stored procedure, puedes mandarle solo el parametro int @dni.. el stored procedure esta preparado para NO recibir el segundo parametro.. y el where esta preparado para hacer el filtro SOLO por el parametro que recibio.
Código SQL:
Ver originalEXEC obtenerhorariopersonalcargo @dni = 4
Código SQL:
Ver originalEXEC obtenerhorariopersonalcargo @nombre = 'juan'
con esta logica puede ser que lo mandes SIN parametros. En ese caso talvez fuera necesario que hicieras una validación. Si los dos parametros vienen nullos.. salir del SP.