0

我的存储过程中有一个参数,它指定要选择的行数。(可能的值:0-100。0 表示选择所有行

例如@Rows = 5;

然后我可以这样做:

Insert into @MyTableVar   
   Select Top(@Rows) * 
   from myTable

现在,正如我之前所说,如果提供 0,我需要返回所有行。
这是我需要的伪代码:

if (@Rows=0) then select * else select top(@Rows) *

我发现有SET ROWCOUNT接受 0 以返回所有行,但我需要插入到不支持的表变量中ROWCOUNT

没有动态sql是否可以实现这一点?

(我知道我可以编写一个简单的 if else 语句和重复查询,但是我有非常复杂的查询并且它们有很多,我只是想避免代码重复)

4

2 回答 2

1

一种方法是只输入一个大数字:

set @Rows = 5;
declare @RowsToUse = (case when @Rows = 0 then 1000000000 else @Rows end);

select top(@RowsToUse) * from myTable
于 2013-04-17T18:35:34.927 回答
1

首先,您缺少该ORDER BY子句,因为您使用的是TOP. 你可以这样做:

SET @Rows = 5;

WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(ORDER BY Id) --put the right order here
    FROM myTable
)
INSERT INTO @MyTableVar
SELECT YourColumns
FROM CTE
WHERE RN <= @Rows OR @Rows = 0
于 2013-04-17T18:39:03.420 回答