2016-12-02 59 views
0

我想選擇列中的第二行,如果下一行爲空,我想繼續循環。這裏是我的腳本:SQL Server 2014循環直到下一行不爲空

DECLARE @MAXID INT, @Counter INT, @clientId AS int 
SET @COUNTER = 2 
SET @clientId = 11 
SELECT @MAXID = COUNT(DISTINCT vw_masterView.LastVisitDate) FROM vw_MasterView where clientId = @clientId; 
WHILE (@COUNTER <= @MAXID) 
BEGIN 
SELECT myData FROM 
(
    SELECT myData , ROW_NUMBER() OVER (order by vw_masterView.LastDate desc) AS Rownumber 
    FROM vw_MasterView where clientId = @clientId 
) results 
WHERE results.Rownumber = @COUNTER 
IF Results.myData IS NOT NULL BREAK; 
    SET @COUNTER = @COUNTER + 1 
END 

我得到以下錯誤:

The multi-part identifier "Results.myData" could not be bound.

謝謝

+0

爲什麼你在這裏首先使用循環?除少數管理任務外,應避免使用循環。如果您可以共享一些示例數據和簡單的表格結構,我們可以幫助您找到一套基於集合的方法。 –

回答

1

沒有在那裏叫Results變量。在變量處設置myData,並檢查null與變量。試試這個:

BEGIN 
    DECLARE @myData VARCHAR(20) 
    SELECT @myData = myData FROM 
    (
     SELECT 
     myData, 
     ROW_NUMBER() OVER (order by vw_masterView.LastDate desc) AS Rownumber 
    FROM vw_MasterView where clientId = @clientId 
) results 
    WHERE results.Rownumber = @COUNTER 

    IF @myData IS NOT NULL BREAK; 
    SET @COUNTER = @COUNTER + 1 
END 
+0

很好,謝謝。 – hncl

0

你對Results.myData的使用是有很大缺陷的。您不在查詢本身內,因此您無法引用表和列。我相信這會實現你想要做的事情。

DECLARE @clientId AS int = 11 

SELECT 
    * 
FROM (
    SELECT myData , ROW_NUMBER() OVER (order by vw_masterView.LastDate desc) AS Rownumber 
    FROM vw_MasterView 
    where clientId = @clientId 
    and myData is not null 
) a 
WHERE Rownumber=2