2013-10-14 70 views
1

我有一个在SQL Server Management Studio中运行正常的SQL查询,但是当我将它复制并粘贴到jasperreports的iReport中以生成报表时,它给了我一个SQL Server异常,并说该声明没有返回结果集。这让我感到困惑。SQL服务器异常:语句没有返回结果集

查询是:

declare @index int = 1 

declare @t Table(ID INT, DI INT, INDBOOK1 INT, INDBOOK2 INT, delta INT) 

while(@index < 18) 
begin 
    INSERT INTO @t 
     select distinct top 18 
     col1.ID, 
     col1.DI, 
     col1.INDBOOK as INDBOOK1, 
     col2.INDBOOK as INDBOOK2, 
     col2.INDBOOK - col1.INDBOOK 
     FROM 
      table as col1 
     inner join 
      table as col2 on col2.ID = @index 
         and col2.DI = col1.DI+1 
     where 
      col1.ID = @index 

    set @index = @index + 1 
end 

select ID, DI, INDBOOK1, INDBOOK2, delta FROM @t 

有谁知道这是为什么给我这个没有结果集返回异常?

任何帮助表示赞赏。

+3

可能是因为您所使用的工具不是很好解析你的SQL。你真的需要一个循环来做到这一点?我不这么认为。 –

+0

感谢您的输入。我赞同你。但是,如何在不循环的情况下执行此任务? –

+0

我很乐意为您提供指导,但根据目前失败的情况,我不确定CTE或联接或任何复杂的SQL也不会破坏您的报告工具。 –

回答

0

很难说没有样本数据等,但我认为这应该是接近你所需要的,在没有明确的循环一条语句:

;WITH x([index]) AS 
(
    SELECT TOP (18) ROW_NUMBER() OVER (ORDER BY number) 
    FROM master..spt_values ORDER BY number 
), 
y AS 
(
    SELECT [index] = ROW_NUMBER() OVER (PARTITION BY col1.ID ORDER BY col1.ID), 
     col1.ID, col1.DI, col1.INDBOOK as INDBOOK1, col2.INDBOOK as INDBOOK2, 
     col2.INDBOOK - col1.INDBOOK as delta 
     FROM dbo.table as col1 
     INNER JOIN dbo.table as col2 
     ON col2.ID = col1.ID 
     AND col2.DI = col1.DI+1 
) 
SELECT y.ID, y.DI, y.INDBOOK1, y.INDBOOK2, y.delta 
FROM x INNER JOIN y 
ON x.[index] = y.[index] 
WHERE y.[index] <= 18;