SQL代码不返回任何值

时间:2015-05-12 15:21:32

标签: c# sql sql-server stored-procedures

我在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

4 个答案:

答案 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

如果我在错误的论坛上发布此内容,我道歉。