Sql server 如何在一个视图/控制器中使用具有联接表的多个存储过程?
我已经创建了多个包含连接操作的存储过程。我试图在我的ASP.NET MVC应用程序中使用这些存储过程,但它不起作用。我在单视图上调用这些存储过程。我正在使用实体框架来连接数据库 基本上,我必须根据特定条件调用这些存储过程,这意味着必须在单个视图上在存储过程之间切换 有人想到在一个视图中调用这样的存储过程吗 以下是我的两个存储过程:Sql server 如何在一个视图/控制器中使用具有联接表的多个存储过程?,sql-server,asp.net-mvc,linq,stored-procedures,Sql Server,Asp.net Mvc,Linq,Stored Procedures,我已经创建了多个包含连接操作的存储过程。我试图在我的ASP.NET MVC应用程序中使用这些存储过程,但它不起作用。我在单视图上调用这些存储过程。我正在使用实体框架来连接数据库 基本上,我必须根据特定条件调用这些存储过程,这意味着必须在单个视图上在存储过程之间切换 有人想到在一个视图中调用这样的存储过程吗 以下是我的两个存储过程: CREATE PROCEDURE sp_GetTotalRecordsByAccountNumber @branch varchar(4), @bas
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),
@basic varchar(6),
@suffix varchar(3),
@startdate datetime,
@enddate datetime
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
AND date BETWEEN @startdate AND @enddate
ORDER BY
date date
END
我的看法是:
@model IEnumerable<ComplexStoredProceduremvc.Models.sp_GetTotalRecordsByAccountNumber_Result>
@model IEnumerable
这里,它只按帐号提供数据如果我想按日期获取数据,那么我必须更改存储过程名称,这不是正确的选项
我希望你会得到这个问题…等待一些解决方案…帮助 我想你可以用一个
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
创建过程sp_GetTotalRecordsByDates
@分支varchar(4)='0',
@基本varchar(6)='0',
@后缀varchar(3)=“0”,
@startdate datetime=null,
@enddate datetime=null
作为
开始
挑选
日期为“日期”,
desc1+RTRIM(LTRIM(ISNULL(desc2'))+“”+
RTRIM(LTRIM(ISNULL(desc2'))作为“说明”,
ISNULL(金额小于0时,则(交易金额/货币)结束,0)作为借方,
ISNULL(金额大于0时,则(交易金额/货币)结束,0)作为贷方,
(总金额/货币)作为余额
从…起
tbl1
左外连接
tbl1.accountnumber上的tbl2=tbl2.accountnumber
左外连接
tbl1.currency上的tbl3=tbl3.currency
左外连接
tbl1.accountName=tbl4.accountName上的tbl4
哪里
(分支=@branch或@branch='0')
和(basic=@basic或@basic='0')
和(后缀=@suffix或@suffix='0')
和(日期>=@startdate或@startdate为空)
及(日期提示:您不应该在存储过程中使用sp_
前缀。Microsoft已经这样做了,而且您在将来的某个时候确实会面临名称冲突的风险。最好只是避免使用sp_
而使用其他前缀,或者根本不使用前缀!我看不出这些存储过程存在的任何原因。您可以通过LINQ创建IQuerybale等价物并在代码中重用它们。请您更清楚地解释一下您得到了什么结果以及想要得到什么结果?存储过程与您的问题有什么关系?不管您使用什么,在任何情况下,您都必须从服务器获取数据或获取两组数据并使用javascript。@SvyatoslavDanyl我已经创建了存储过程来根据帐号和日期获取数据。在我的控制器中,我必须设置一个条件来检查用户是否需要按帐号或日期获取数据。在此基础上,我们在视图中得到结果。但问题是,我不能在单个视图中调用两个存储过程,以便它可以相应地切换。
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