SQL Table 值函数 - Return 来自 'WITH' 的某些数据基于参数值
SQL Table Valued Function - Return certain data from 'WITH' based on parameter value
我正在尝试 "with" 来循环遍历一些数据(它做得很好)。但是在那之后,我想 return 数据依赖于一个位参数。重要的是这是在函数内部。下面基本上是我的代码在做什么。
WITH StuffChain
AS (
//initial
union all
//more
)
在此之后,我正在尝试做类似
的事情
CASE WHEN @MyParamVal = 1 THEN
SELECT TOP (1) * FROM StuffChain
ELSE
SELECT * FROM StuffChain
END
RETURN
SQL不是我的强项还在学习中抱歉。我也不确定是否使用内联或多语句函数
编辑:当我给出案例时,我用它来解释我对 return 的要求,而不一定是我将使用的内容。我用它来描述我需要什么,如果这有意义的话,我知道的很少。
首先,使用 TOP
而不使用 ORDER BY
有点没有意义,因为它没有提供 select 前几行的顺序。在这种情况下,我们可以尝试使用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);
我们可以使用 Table 变量,例如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
您可以进行如下操作。这只是解决方案之一。你也可以用许多其他方式来做。
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>;
我正在尝试 "with" 来循环遍历一些数据(它做得很好)。但是在那之后,我想 return 数据依赖于一个位参数。重要的是这是在函数内部。下面基本上是我的代码在做什么。
WITH StuffChain
AS (
//initial
union all
//more
)
在此之后,我正在尝试做类似
的事情CASE WHEN @MyParamVal = 1 THEN
SELECT TOP (1) * FROM StuffChain
ELSE
SELECT * FROM StuffChain
END
RETURN
SQL不是我的强项还在学习中抱歉。我也不确定是否使用内联或多语句函数
编辑:当我给出案例时,我用它来解释我对 return 的要求,而不一定是我将使用的内容。我用它来描述我需要什么,如果这有意义的话,我知道的很少。
首先,使用 TOP
而不使用 ORDER BY
有点没有意义,因为它没有提供 select 前几行的顺序。在这种情况下,我们可以尝试使用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);
我们可以使用 Table 变量,例如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
您可以进行如下操作。这只是解决方案之一。你也可以用许多其他方式来做。
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>;