2013-10-08 12 views
0

UI上有一個GRID,它在單擊「>>」按鈕時逐頁顯示信息。此按鈕使用row_number()概念使用存儲過程從數據庫中獲取數據。我從我的用戶界面傳遞起始行號和結束行號,並相應地傳遞到存儲過程,查詢返回表中的值。 SQL查詢可以被認爲是(200和300樣本凝視和結束行號):C#分頁不適用於添加到表格中的新行

with y 
as 
(
    select 
     version, 
     Id , 
     row_number() over (order by Id,version) r 
    from 
     X 
) 
select 
    Id, 
    version 
from 
    y 
where 
    r>200 and r<300 

這工作都正常,直到現有ID的新版本進入表。在這種情況下,現有行的row_number()會更改,並且分頁函數會變得混亂。

請幫忙!!!需要明天趕上最後期限。

+1

我們可以看到你的數據庫模式嗎? – evilbhonda

+0

這個概念證明給客戶,如果你有一個更好的設計,模式可以改變。它是合同和版本ID一起作爲主鍵的合同表。合同中的很多條款都在列中。版本是爲了保持對任何合同所做的更改。 – Debdeep

+0

修改ID 1和版本1的合約時,將添加新行作爲ID 1和版本2。這導致了麻煩,因爲ID 2和版本1以前是row_number 2,但現在Id 2和版本1是row_number 3 ..希望這可以澄清事實! – Debdeep

回答

0

假設:您只想顯示每個ID的最新版本。

好的,你可以確保'X'是過濾後的結果列表,所以它只包含每個ID的最新版本。

實例數據

例如,如果您有以下數據 -

ID | Version 
1 1 
2 1 
3 1 
4 1 
1 2 

要獲得所有數據,只是從該表返回所有,這將返回所有5行(你現在正在做)。

X的要求的結果

你真正想要的是下面返回 -

ID | Version 
1 2 
2 1 
3 1 
4 1 

有很多方法可以得到一個表中的最新記錄,以及數百單獨計算器的答案。最新記錄查詢的

例子查詢

的一種方式(可以改善)是

WITH Y 
AS 
(
    SELECT 
    t.Id, 
    MAX(OriginalTable.Ver) as [Verson], 
    ROW_NUMBER() over (ORDER BY t.Id) as rowNumber 
    FROM 
    (SELECT DISTINCT ID FROM @OriginalTable) AS t 
    INNER JOIN 
    OriginalTable ON (t.ID = OriginalTable.ID) 
    GROUP BY 
    t.Id 
) 
SELECT 
    Id, [Verson] 
FROM 
    Y 
WHERE 
    rowNumber > 2 AND rowNumber < 8 

關鍵是要確保上述查詢「X」排除你重複的行,然後在該列表上實現您的分頁。

替代選項

說了這麼多,你可能只是重新設計你的表,所以你有一個表,只有ID在那裏(你需要一個不受版本任何其他細節),然後另一個表包含每個版本的記錄。但這是另一個問題!

+0

讓我再澄清一點:UI上有一個GRID,它將逐頁信息顯示爲「>>」按鈕,並單擊此按鈕使用上述查詢從數據庫中提取數據..所以,如果當前加載的行在網格中介於1到10之間,並且在用戶點擊「>>」按鈕之前,如果數據庫中有更新的版本,則row_number()計數將不起作用。此外,我需要通過分頁i顯示所有記錄n網格 – Debdeep