我在C#
中调用了以下存储过程:
ALTER PROCEDURE [dbo].[GetJobStatusSummary] @FiscalYear int,
@JobIDList varchar(max)
AS
SELECT
SUM(CASE StatusID
WHEN 5 THEN 1
ELSE 0
END) AS Completed,
SUM(CASE StatusID
WHEN 5 THEN 0
ELSE 1
END) AS Incomplete
FROM Review
WHERE FiscalYear = @FiscalYear
AND JobID + '|' + Position IN (SELECT
Argument
FROM dbo.CreateInClause(@JobIDList))
GROUP BY FiscalYear
当我传入以下内容时(这是从SQL Server Management Studio中获取的):
DECLARE @return_value int
EXEC @return_value = [dbo].[GetJobStatusSummary] @FiscalYear = 2015,
@JobDList = N'00304730,00334573,00635385,'
SELECT
'Return Value' = @return_value
GO
我没有收到任何已完成或未完成的任何内容,只返回值为0.我已经确认数据库中存在与这些作业ID相关的数据。我不熟悉SQL,因为我继承了这个项目。存储过程没有改变,所以我不确定我缺少什么。有什么想法吗?
编辑: 来自表的数据样本,这有用吗?我用来测试的ID没有在这里表示,但这是其中数据的一个例子
JobID StatusID FiscalYear CreatedDT LastUpdatedDT
14999 5 2011 55:15.4 12:15.3
163511 2 2011 08:20.6 12:15.3
答案 0 :(得分:0)
SELECT SUM( CASE StatusID WHEN 5 THEN 1 ELSE 0 END ) AS Completed ,
SUM( CASE StatusID WHEN 5 THEN 0 ELSE 1 END ) AS Incomplete,
FiscalYear
FROM Review
WHERE FiscalYear = @FiscalYear AND
JobID + '|' + Position IN ( SELECT Argument FROM dbo.CreateInClause( @JobIDList ) )
GROUP BY FiscalYear
答案 1 :(得分:0)
这一行:
SELECT 'Return Value' = @return_value
如果过程正确执行,将返回0。 @return_value就是为了。所以你不需要在通话结束时使用SELECT'返回值'= @return_value。
尝试执行您的查询以及参数,以便确定它是否正常。
再试一次:
DECLARE @return_value int
DECLARE @FiscalYear int
DECLARE @JobDList VARCHAR(MAX)
EXEC @return_value = [dbo].[GetJobStatusSummary]
@FiscalYear = 2015,
@JobDList = N'00304730,00334573,00635385,'
答案 2 :(得分:0)
我首先执行两个查询以查看表中是否有任何数据:
SELECT StatusID FROM Review WHERE FiscalYear = 2015;
当有结果时,检查'JobID +'|'的输出是什么+位置'是。
SELECT StatusID, JobID + '|' + Position FROM Review WHERE FiscalYear = 2015;
也许你可以看到输出不在列表中: SELECT参数FROM dbo.CreateInClause(@JobIDList)
答案 3 :(得分:0)
我想我明白了。 正如我所说,SQL(除非它只是选择一些东西)超出了我的想象,但是因为我知道SQL没有改变,所以它看起来像是C#。
我在C#中有这行代码
var jobs= from d in jobData select d.JobID;
在SQL中,它也在寻找位置,使用“|”,但它不是。我将该行更改为:
var jobs= from d in jobData select d.JobID;+ "|" + d.Position
如果我在错误的论坛上发布此内容,我道歉。