有没有办法说明如果在使用中传递@topParam值,如果不是全部。
@topParam
select TOP COALESCE ( @topParam, all )
答案 0 :(得分:4)
这不是正确的解决方案,但暂时适用于你
@topParam
select TOP (COALESCE (@topParam, 1000000000))
认为你的结果集没有;有1000000000所以当@topParam为空时它将占用所有记录。
享受编码..
答案 1 :(得分:0)
如果我理解正确,我会使用CASE
CASE
WHEN @topParam > 0 THEN (SELECT WITH LIMIT)
ELSE (SELECT WITHOUT LIMIT)
END
答案 2 :(得分:0)
最好制作两个存储过程。
从根本上影响最佳查询计划的参数更改对于存储过程来说是个坏主意。
在使用MS SQL 2005进行测试时,我注意到参数化TOP
语句比硬编码值慢。
答案 3 :(得分:0)
以下语法也有效 -
SELECT top (@maxNodes) @listOfInvitation = COALESCE(@listOfInvitation + ', ', '') + Cast(InviteID AS VARCHAR(10))
FROM #temp_duplicate_inviteid
WHERE cGuid = @cGUID;