我的存储过程是否运行开始-结束部分?

Does my stored procedure run the begin-end part?

提问人:Makiyo 提问时间:10/27/2023 最后编辑:marc_sMakiyo 更新时间:10/27/2023 访问量:58

问:

法典:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[vvvvvv]
    @doeverything CHAR(1),  --Y or N
    @pagenumber int  --page number in total is 19
AS
    SET NOCOUNT ON;  
BEGIN 
    IF @pagenumber = 1  
    BEGIN   
        -- many temp table here to merge
    END

    DECLARE @pageSize INT;
    SET @pageSize = 300000;

    ;WITH T AS 
    (
        SELECT *
        FROM [xx_xxxDB].[dbo].my_final_table nolock
    ),
    T2 AS 
    (
        SELECT 
            COUNT(1) TotalCount,
            (COUNT(1) / @pageSize) + 1 TotalPage 
        FROM T
    )
    SELECT *
    FROM T2, T
    WHERE RowNo BETWEEN (@pagenumber - 1) * @pageSize  + 1 
      AND @pagenumber * @pageSize;
END

由于我的数据有 5,700,000 行,所以我的页码将是 19(每页有 300,000 行)。我不确定我的存储过程是否会在此处运行 --many 临时表来合并部分?还是会经历最后一部分?谢谢;WITH T

sql-server 存储过程

评论

0赞 Thom A 10/27/2023
SQL Server 仅在解析为 true 时才执行操作,如果这是您要问的。IFIF
2赞 Thom A 10/27/2023
这也是非常容易测试的。;运行过程并查看执行计划。
0赞 siggemannen 10/27/2023
我想说的是,在某些情况下,有些东西可能会被“编译”,所以如果你在那里有错误或绑定问题,它们可能会影响过程的运行,即使代码本身没有运行
4赞 GarethD 10/27/2023
在不相关的说明中,您没有使用 nolock'。这可能是设计使然,您有意给表提供此别名,但这似乎是一个非常奇怪的别名选择。nolock' table hint here, you are giving your table an alias of
1赞 Charlieface 10/27/2023
其他问题:无论如何都是一个坏主意。 为什么要使用临时表? 是一个逗号连接,这是古老的用法,而是做一个显式的.无论如何,您应该只使用窗口函数而不是此处的连接:nolock-- many temp table here to mergeFROM T2, TFROM T2 CROSS JOIN TSELECT *, COUNT(1) OVER () TotalCount, COUNT(*) OVER () / @pageSize + 1 TotalPage FROM dbo.my_final_table

答: 暂无答案