我在T SQL中遇到问题。我想在CASE WHEN
子句中使用WHERE
子句扩展我的语句,该子句取决于局部变量@ counter2。
当@ 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 :(得分:1)
您可以在FETCH NEXT
中使用case语句,如下所示:
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
答案 1 :(得分:0)
我不确定你要做什么,但是IsNumeric()
会返回0或1.它不会返回2.此外,你不能使order by
有条件。
也许你想要的条件是:
order by (case when @count2 = 2 then COPSYS_ID end)