2013-10-14 91 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;