存储过程,空参数
本文关键字:参数 存储过程 | 更新日期: 2023-09-27 18:18:00
我正在使用c#, wpf与mvvm和sql server 2008中的存储过程。
当将值发送到执行存储过程的函数时,我遇到了一个问题,我从一个表单中得到,在那里它可以留下一些字段为空。但这些都是类的对象,因此访问它们不应该为空。我留下代码。
public IEnumerable<Model.AsuntoModel> GetBusqueda(Model.PrioridadModel prioridad, Model.StatusAsuntoModel statusasunto, Model.DestinatarioModel destinatario, Model.SignatarioModel signatario, DateTime rangofecha, DateTime referenciadocumento)
{
ObservableCollection<Model.AsuntoModel> Busqueda = new ObservableCollection<Model.AsuntoModel>();
using (var entity = new GestorDocumentEntities())
{
try
{
entity.GetAsuntos(prioridad.IdPrioridad, statusasunto.IdStatusAsunto, destinatario.IdDestinatario, signatario.IdSignatario, referenciadocumento).ToList().ForEach(p =>
{
Busqueda.Add(new Model.AsuntoModel()
{
IdAsunto = p.IdAsunto,
FechaCreacion = (DateTime)p.FechaCreacion,
FechaRecibido = (DateTime)p.FechaRecibido,
FechaDocumento = (DateTime)p.FechaDocumento,
Titulo = p.Titulo,
Descripcion = p.Descripcion,
Alcance = p.Alcance,
IdUbicacion = (long)p.IdUbicacion,
Ubicacion = new Model.UbicacionModel()
{
UbicacionName = p.CAT_UBICACION.UbicacionName
},
IdInstruccion = (long)p.IdInstruccion,
Instruccion = new Model.InstruccionModel()
{
InstruccionName = p.CAT_INSTRUCCION.InstruccionName
},
IdPrioridad = (long)p.IdPrioridad,
Prioridad = new Model.PrioridadModel()
{
PrioridadName = p.CAT_PRIORIDAD.PrioridadName
},
IdStatusAsunto = p.IdStatusAsunto,
StatusAsunto = new Model.StatusAsuntoModel()
{
StatusName = p.CAT_STATUS_ASUNTO.StatusName
},
FechaVencimiento = p.FechaVencimiento,
Folio = p.Folio
});
});
}
catch (Exception)
{
;
}
}
return Busqueda;
}
这是众多解决方案中的一个。
您只需给SQL
参数一个默认值,就可以使它们为空。
E。G:
@ParamA = null
@ParamB = null
etc..
然后在SQL端管理它以查看收到了多少。
这样,如果您没有提供任何参数,您的查询将有一个值(在本例中为null)。然后您可以这样测试它:
IF @ParamA IS NULL
BEGIN
-- You didn't give that param.
END
ELSE
-- You gave a param
您的SP可以被编码为将NULL参数视为ANY。
select *
from table
where (table.col = @COL or @COL IS NULL)
and (table.col2 = @COL2 or @COL2 IS NULL)