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

问题描述 投票:0回答:2

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

编辑:当我给案件时,我用它来解释我要返回的内容,不一定是我将要使用的内容。我用它来描述我所需要的东西,只要知道的话就知道一点。抱歉,我对这方面的描述还不够了解

非常感谢您提供的任何帮助

sql sql-server function case-when
2个回答
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);

0
投票

您可以使用临时表,如下所示:

WITH StuffChain 
AS (
   //initial
    union all
   //more
)
SELECT * INTO #TEMP FROM StuffChain;

--do what ever you want with temp table

DROP TABLE #TEMP;

--#TEMP: local temporary table
--##TEMP: global temporaty table

参考:http://www.sqlservertutorial.net/sql-server-basics/sql-server-temporary-tables/

© www.soinside.com 2019 - 2024. All rights reserved.