在 SQL 存储过程中将 DECLARE 分成两部分有什么好处吗?

Is there any benefit to splitting DECLARE into two parts in a SQL Stored Procedure?

我在存储过程中看到类似这样的代码:

DECLARE @Var1 NVARCHAR (64),
        @var2 NVARCHAR (64),
        @Var3 NVARCHAR(512);

DECLARE @Var4 AS INT,
        @Var5 AS INT,
        @Var6 AS INT,
        @Var7 nvarchar(32);

以这种方式声明它们有什么好处,而不是像下面那样将它们全部放在一个 DECLARE 语句中吗?

DECLARE @Var1 NVARCHAR (64),
        @var2 NVARCHAR (64),
        @Var3 NVARCHAR(512),
        @Var4 AS INT,
        @Var5 AS INT,
        @Var6 AS INT,
        @Var7 nvarchar(32);

T I 提到的可读性可能是最重要的。使用初始化器有优点也有缺点。使用先前声明的变量的值必须在单独的语句中。仅当应用初始化程序时,以下两个选项之间才会有很大的性能差异。选项 A 的运行速度是其两倍。

选项 A

DECLARE @i INT = 0;
DECLARE @time DATETIME2(7) = SYSDATETIME();
WHILE @i < 10000000
BEGIN
    DECLARE @A CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @B CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @C CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @D CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @E CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @F CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @G CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @H CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @J CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @K CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
          , @L CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS';

    SET @i += 1;
END
PRINT DATEDIFF(ms, @time, SYSDATETIME());

选项 B

DECLARE @i INT = 0;
DECLARE @time DATETIME2(7) = SYSDATETIME();
WHILE @i < 10000000
BEGIN
    DECLARE @A CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @B CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @C CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @D CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @E CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @F CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @G CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @H CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @J CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @K CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS'
    DECLARE @L CHAR(1000) = 'ASDGASDGASGDSAGSADGASGS';

    SET @i += 1;
END
PRINT DATEDIFF(ms, @time, SYSDATETIME());