我试图做一个“ with”来遍历一些数据(这样做很好)。但是之后,我想返回依赖于bit参数的数据。重要的是这在函数内部。下面基本上是我的代码正在做的事情。
WITH StuffChain
AS (
//initial
union all
//more
)
在此之后,我正在尝试做类似的事情
CASE WHEN @MyParamVal = 1 THEN
SELECT TOP (1) * FROM StuffChain
ELSE
SELECT * FROM StuffChain
END
RETURN
SQL不是我的强项,我仍然在学习抱歉。我也不确定是否使用内联或多语句功能
编辑:当我给出案例时,我将使用它来说明我要返回的内容,不一定是我将要使用的内容。我用它来描述我所需要的东西,只要知道的话就知道一点。
答案 0 :(得分:5)
首先,在没有TOP
的情况下使用ORDER BY
有点意义,因为它没有提供选择前几行的顺序。在这种情况下,我们可以尝试使用ROW_NUMBER
来控制顺序:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY some_col) rn
FROM StuffChain
)
SELECT *
FROM cte
WHERE
(rn = @MyParamVal) OR (@MyParamVal <> 1);
答案 1 :(得分:1)
您可以执行以下操作。这只是解决方案之一。您还可以使用许多其他方法。
WITH StuffChain
AS (
//initial
union all
//more
)
创建CTE后,请尝试以下操作
SELECT TOP (CASE WHEN @MyParamVal = 1 THEN 1 ELSE
(SELECT COUNT(1) FROM StuffChain) END *
FROM StuffChain
order by <column> <ASC/DESC>;
答案 2 :(得分:0)
我们可以使用表变量,例如Declare @TEMP Table (intcol int,...)
在函数内。
Declare @TEMP Table (intcol int,...)
WITH StuffChain
AS (
//initial
union all
//more
)
SELECT * INTO @TEMP FROM StuffChain;
--do what ever you want with temp table