是否可以使用T-SQL条件TOP子句?

apo*_*lfj 10 t-sql

我想动态使用TOP或者不是这样的......

SELECT @SomeNumber CASE WHERE 0 THEN TOP 5 COLUMNNAME
                        ELSE COLUMNNAME
                   END
FROM TABLE
Run Code Online (Sandbox Code Playgroud)

Mar*_*aga 18

我希望能够理解你的问题:如果传递@SomeNumber = 0,你想选择TOP 5行,否则选择所有可行的行

作为第一个直接实现,你可以做这样的事情

declare @SomeNumber as int

set @SomeNumber = 5
-- set @SomeNumber = 1

SELECT TOP (SELECT @SomeNumber) COLUMNNAME FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

您可以更改参数值,以便拥有所需的行数


否则我建议你实现一个存储过程(也许你已经这样做了,否则你可以按照下面的步骤来做)

CREATE procedure [dbo].[TOPCLAUSE]

    -- clause parameter
    @SomeNumber as integer

AS

IF @SomeNumber = 0 
BEGIN
    SELECT TOP 5 COLUMNNAME FROM MYTABLE
END
ELSE
BEGIN
    SELECT COLUMNNAME FROM MYTABLE
END

GO
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话

exec [dbo].[TOPCLAUSE] 0

exec [dbo].[TOPCLAUSE] 1
Run Code Online (Sandbox Code Playgroud)

我可能没有回答你的问题但请告诉我它是否对你有帮助


cod*_*ger 6

我认为你不能。

您可以使用动态SQL:

Declare @int int

set @int = 10

exec ('Select top '  + @int + ' * From Customers')
Run Code Online (Sandbox Code Playgroud)

或者你可以设置 rowcount

if (@someNumber != 0)
begin
set rowcount 5
end

select * From Customers

set rowcount 0
Run Code Online (Sandbox Code Playgroud)


SPE*_*109 2

我刚刚使用过这样的东西:-

Declare @SQL nvarchar(max), @Params nvarchar(max)
set @Params = N''
Set @SQL = N'SELECT ' + Cast(@SomeNumber as varchar) + ' CASE WHERE 0 THEN TOP 5 COLUMNNAME
                        ELSE COLUMNNAME
                   END
FROM TABLE'

exec sp_executesql @SQL, @Params
Run Code Online (Sandbox Code Playgroud)