我对SQL Server中的局部变量有疑问。当我声明局部变量时,我从DECLARE语句开始,然后创建我的变量。我可以开始输入其他语句吗?在做其他事情之前,我是否需要BEGIN声明之类的东西?
例如,这个编码样本可以接受:
DECLARE
@stock INT,
@customername
select @stock = ...
select @customername ...
我可以跟任何其他声明一起使用吗?我是否必须将声明部分与其余编码分开?
答案 0 :(得分:1)
您无需将其分开。
但你写的声明错误应该是:
DECLARE @stock INT;
DECLARE @customername NVARCHAR(11);
必须输入所有变量
不同之处在于,如果你选择了多于一行的语句,那么:
set @var = (select value from table)
会引发错误
select @var = value from table
将从选定的最后一行分配给@var值。
答案 1 :(得分:0)
是的,你可以。
BEGIN用于特殊操作的代码块的一部分。 BEGIN可用于创建事务查询。例如:
BEGIN TRAN
Update MyTable SET X = 1 WHERE Y='4'
ROLLBACK TRAN -- Didn't like what I did, undo it
在您对事务进行ROLLBACK或COMMIT之前,您在块中查询的所有表都处于不确定状态。在您发布代码之前,您的服务器不会做太多事情。
答案 2 :(得分:0)
不,这只是你编码风格的问题。您可以自由地将DECLARE与其他代码混合使用。请务必在使用之前声明变量,而不是在同一批次中声明它两次。 未初始化的变量通常为NULL。 可以在单个语句中声明和初始化变量:
DECLARE @stock INT = 123;
顺便说一句,SELECT @stock = ...和SET @stock = ... 之间存在差异