SQL表值函数-根据参数值从“ WITH”返回某些数据

时间:2019-09-30 08:34:23

标签: sql sql-server function case-when

我试图做一个“ 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不是我的强项,我仍然在学习抱歉。我也不确定是否使用内联或多语句功能

编辑:当我给出案例时,我将使用它来说明我要返回的内容,不一定是我将要使用的内容。我用它来描述我所需要的东西,只要知道的话就知道一点。

3 个答案:

答案 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