忽略存储过程中的跳过/接收 [英] Ignore skip/take in stored procedure

查看:31
本文介绍了忽略存储过程中的跳过/接收的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

数据库中很少有大型存储过程.有@skip 和@take 参数.我可以使用这个存储过程并禁用@take 吗?我有时想选择所有行,但有时要选择@take 行.我可以使用诸如if else"之类的东西来禁用 @take(如果 @take 为 null - 例如)并且不复制主选择代码或不复制此存储过程而没有 @skip,@take 吗?

There are few big stored procedures in database. There are @skip and @take parameters. Can I use this stored procedure and disable @take? I want select all rows sometimes but sometimes @take rows. Can I use something like 'if else' for disabling @take, (if @take is null - for example) and not duplicate main select code or not duplicate this stored procedures without @skip,@take?

ALTER PROCEDURE ...
@Skip INT,
@Take INT
AS
BEGIN
SELECT col1, col2, ...
...
...
...
 FROM ...
 WHERE ... 
 ORDER BY ....

OFFSET @Skip ROWS 
FETCH NEXT @Take ROWS ONLY 

我想实现这样的东西(@skip,@take 只有当它通过时):

I want to achieve something like this (@skip, @take only when it is passed):

ALTER PROCEDURE ...
@Skip INT = null,
@Take INT = null
AS
BEGIN
SELECT col1, col2, ...
...
...
...
 FROM ...
 WHERE ... 
 ORDER BY ....
if (@skip IS NOT NULL AND @take IS NOT NULL)
    OFFSET @Skip ROWS 
    FETCH NEXT @Take ROWS ONLY 

推荐答案

接受默认的 NULL 值并将 @Skip@Take 设置为0和省略参数时非常大的值.

Accept default NULL values and set @Skip and @Take to 0 and very big value when parameters are omitted.

ALTER PROCEDURE YourProcedure
    @Skip INT = NULL,
    @Take INT = NULL
AS
BEGIN

    IF @Skip IS NULL
        SET @Skip = 0

    IF @Take IS NULL
        SET @Take = 999999999

    SELECT
        YourColumn
    FROM
        YourTable
    ORDER BY
        SomeColumn
    OFFSET 
        @Skip ROWS 
    FETCH NEXT 
        @Take ROWS ONLY 

END

确保您的最大 @Take 值始终大于查询结果行.

Make sure that your max @Take value is always greater than your query result rows.

这篇关于忽略存储过程中的跳过/接收的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆