2016-02-02 25 views
0

我有一個T SQL的問題。我想用WHERE子句中的CASE WHEN子句來擴充我的聲明,該子句取決於局部變量@ counter2。T SQL擴展在哪裏條款與案件當我的訂單由

當@ counter2的值爲'2'時,應使用FETCH NEXT子句擴展整個語句,如下所示,以在10 000行之後停止。

目前我有以下測試語句,但它不能像這樣工作。如果@ counter2變量的值不是'2',則該語句應該在條款where ID not in (1,2)之後完成。

是否有可能這樣做?

DECLARE @counter2 INT = 0; 

WHILE @counter2 <= 1 
BEGIN 
    SET @counter2 = @counter2 + 1 

    SELECT * 
    FROM companies 
    WHERE ID NOT IN (1,2) 
     AND CASE WHEN @counter2 = 2 THEN 
      ORDER ORDER ID 
      OFFSET 0 ROWS 
      FETCH NEXT 10000 ROWS ONLY 
    END 

END 
+0

你在想什麼'FETCH NEXT 10000行ONLY'將​​在這裏做? –

+0

'where'和'order by'是單獨的從句。如果你想在where子句中使用單詞'和',你可以添加另一個過濾器,而不是一個order by子句。 –

+0

可以使用'if'在兩個可能的select語句之間進行選擇,或者使用基於'row_number()'而不是'fetch'(或更合適的'top')的手動分頁。 – Luaan

回答

0

我不知道你正在嘗試做的,但IsNumeric()返回0或1。不退還2.另外,你不能使order by條件。

也許你想的條件是:

order by (case when @count2 = 2 then COPSYS_ID end) 
+0

好的。我已經刪除了IsNumeric()函數,這是沒有必要的。 實際上,如果@ counter2變量的值爲'2',那麼我希望該語句只讀取10000條記錄。 而在T SQL中,您需要'FETCH NEXT 10 000 rows''order by'和'OFFSET'條款,否則它不起作用。 – Michael

1

可以使用case語句在FETCH NEXT像這樣:

DECLARE @counter2 INT = 2 

SELECT 
    my_columns -- because we never use SELECT * 
FROM 
    Companies 
WHERE 
    id NOT IN (1, 2) 
ORDER BY 
    id 
OFFSET 0 ROWS 
FETCH NEXT 
    CASE 
     WHEN @counter2 = 2 THEN 10000 
     ELSE 999999999 
    END ROWS ONLY