问题描述
我创建了多个带有连接操作的存储过程。我试图在我的 ASP.NET MVC 应用程序中使用这些存储过程,但它不起作用。我在单个视图上调用这些存储过程。我正在使用实体框架进行通信。到数据库。
基本上,我必须根据特定条件调用这些存储过程,这意味着必须在单个视图上的存储过程之间切换。
有没有人知道在单个视图中调用这样的存储过程?
这是我的两个存储过程:
CREATE PROCEDURE sp_GetTotalRecordsByAccountNumber
@branch varchar(4),@basic varchar(6),@suffix varchar(3)
AS
BEGIN
SELECT
Date AS 'Date',desc1 + RTRIM(LTRIM(ISNULL(desc2,''))) + '' +
RTRIM(LTRIM(ISNULL(desc2,''))) AS 'Description',ISNULL(CASE WHEN Amount < 0 THEN (Transactionamt / Currency) END,0) AS Debit,ISNULL(CASE WHEN Amount > 0 THEN (Transactionamt / Currency) END,0) AS Credit,(TotalAmount / currency) AS Balance
FROM
tbl1
LEFT OUTER JOIN
tbl2 ON tbl1.accountnumber = tbl2.accountnumber
LEFT OUTER JOIN
tbl3 ON tbl1.currency = tbl3.currency
LEFT OUTER JOIN
tbl4 ON tbl1.accountName = tbl4.accountName
WHERE
branch = @branch
AND basic = @basic
AND suffix = @suffix
ORDER BY
date
END
CREATE PROCEDURE sp_GetTotalRecordsByDates
@branch varchar(4),@suffix varchar(3),@startdate datetime,@enddate datetime
AS
BEGIN
SELECT
Date AS 'Date',ISNULL(CASE WHEN Amount < 0 THEN (Transactionamt/Currency) END,ISNULL(CASE WHEN Amount > 0 THEN (Transactionamt/Currency) END,(TotalAmount/currency) AS Balance
FROM
tbl1
LEFT OUTER JOIN
tbl2 ON tbl1.accountnumber = tbl2.accountnumber
LEFT OUTER JOIN
tbl3 ON tbl1.currency = tbl3.currency
LEFT OUTER JOIN
tbl4 ON tbl1.accountName = tbl4.accountName
WHERE
branch = @branch
AND basic = @basic
AND suffix = @suffix
AND date BETWEEN @startdate AND @enddate
ORDER BY
date date
END
我的控制器是:
[HttpPost]
public ActionResult Index(FormCollection formCollection,string accountNo,string date,bool allcheckBox)
{
if(allcheckBox == true)
{
var dc = db.sp_GetTotalRecordsByAccountNumber(accountNo).ToList();
}
else
{
var dc = db.sp_GetTotalRecordsByDates(accountNo).ToList();
}
return view("Index",dc);
}
我的观点是:
@model IEnumerable<ComplexStoredProceduremvc.Models.sp_GetTotalRecordsByAccountNumber_Result>
这里,如果我想按日期获取数据,它只按帐号提供数据,然后我必须更改存储过程名称,这不是正确的选项。
我希望你能解决这个问题......等待一些解决方案......帮助!
解决方法
我认为你可以用下面的一个 SP
处理这两种情况
CREATE PROCEDURE sp_GetTotalRecordsByDates
@branch varchar(4)='0',@basic varchar(6)='0',@suffix varchar(3)='0',@startdate datetime=null,@enddate datetime=null
AS
BEGIN
SELECT
Date AS 'Date',desc1 + RTRIM(LTRIM(ISNULL(desc2,''))) + '' +
RTRIM(LTRIM(ISNULL(desc2,''))) AS 'Description',ISNULL(CASE WHEN Amount < 0 THEN (Transactionamt/Currency) END,0) AS Debit,ISNULL(CASE WHEN Amount > 0 THEN (Transactionamt/Currency) END,0) AS Credit,(TotalAmount/currency) AS Balance
FROM
tbl1
LEFT OUTER JOIN
tbl2 ON tbl1.accountnumber = tbl2.accountnumber
LEFT OUTER JOIN
tbl3 ON tbl1.currency = tbl3.currency
LEFT OUTER JOIN
tbl4 ON tbl1.accountName = tbl4.accountName
WHERE
(branch = @branch or @branch='0')
AND (basic = @basic or @basic='0')
AND (suffix = @suffix or @suffix ='0')
AND (date >= @startdate or @startdate is null)
AND (date <= @enddate or @enddate is null)
ORDER BY
date
END
只要确定您是否不想使用某些 parameter
进行过滤,将其作为 0 or null
传递。在本例中,我使用 0
表示 varchar,使用 null
表示日期。