在 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());
我在存储过程中看到类似这样的代码:
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());