我想动态使用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)
我可能没有回答你的问题但请告诉我它是否对你有帮助
我认为你不能。
您可以使用动态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)
我刚刚使用过这样的东西:-
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)