如何修复错误 变量名已经声明。变量名称在查询批处理或存储过程中必须是唯一的?
How to fix error The variable name has already been declared. Variable names must be unique within a query batch or stored procedure?
我正在 SQL 服务器中创建一个结合了多个查询的脚本。在每个查询中,我都声明了一个变量 @FieldName
。当我 运行 脚本出现以下错误时。
Msg 134, Level 15, State 1, Line 24 The variable name '@FieldName' has
already been declared. Variable names must be unique within a query
batch or stored procedure.
这些查询有更多的代码,我只提供最少的代码。
脚本:
BEGIN TRY
BEGIN TRANSACTION
Print '1'
DECLARE @FieldName NVARCHAR(100) = 'Bank Name';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
BEGIN TRY
BEGIN TRANSACTION
DECLARE @FieldName NVARCHAR(100) = 'Account Number';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
我们如何解决这个问题?
有2种可能。使用 GO
分隔批次。 (有效分割查询范围,之前声明的所有变量在下一批查询中不可用。)
或者只声明一次变量并使用SET
大多数时候你会想要选项 2,重用声明。但有时当您有需要 GO
(CREATE VIEW) 的语句时,您需要使用选项 1.
选项 1
BEGIN TRY
BEGIN TRANSACTION
Print '1'
DECLARE @FieldName NVARCHAR(100) = 'Bank Name';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
GO -- Batch seperator
BEGIN TRY
BEGIN TRANSACTION
DECLARE @FieldName NVARCHAR(100) = 'Account Number';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
选项 2
DECLARE @FieldName NVARCHAR(100) -- Declare once
BEGIN TRY
BEGIN TRANSACTION
Print '1'
SET @FieldName = 'Bank Name'; -- Use Set to set the value
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
BEGIN TRY
BEGIN TRANSACTION
SET @FieldName = 'Account Number'; -- Use Set to set the value
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
除非您使用 GO 语句,否则您可以在 SQL 语句中声明一次变量
在语句的顶部声明该变量,只更改每个块下的值
我正在 SQL 服务器中创建一个结合了多个查询的脚本。在每个查询中,我都声明了一个变量 @FieldName
。当我 运行 脚本出现以下错误时。
Msg 134, Level 15, State 1, Line 24 The variable name '@FieldName' has already been declared. Variable names must be unique within a query batch or stored procedure.
这些查询有更多的代码,我只提供最少的代码。
脚本:
BEGIN TRY
BEGIN TRANSACTION
Print '1'
DECLARE @FieldName NVARCHAR(100) = 'Bank Name';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
BEGIN TRY
BEGIN TRANSACTION
DECLARE @FieldName NVARCHAR(100) = 'Account Number';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
我们如何解决这个问题?
有2种可能。使用 GO
分隔批次。 (有效分割查询范围,之前声明的所有变量在下一批查询中不可用。)
或者只声明一次变量并使用SET
大多数时候你会想要选项 2,重用声明。但有时当您有需要 GO
(CREATE VIEW) 的语句时,您需要使用选项 1.
选项 1
BEGIN TRY
BEGIN TRANSACTION
Print '1'
DECLARE @FieldName NVARCHAR(100) = 'Bank Name';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
GO -- Batch seperator
BEGIN TRY
BEGIN TRANSACTION
DECLARE @FieldName NVARCHAR(100) = 'Account Number';
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
选项 2
DECLARE @FieldName NVARCHAR(100) -- Declare once
BEGIN TRY
BEGIN TRANSACTION
Print '1'
SET @FieldName = 'Bank Name'; -- Use Set to set the value
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
BEGIN TRY
BEGIN TRANSACTION
SET @FieldName = 'Account Number'; -- Use Set to set the value
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error'
END CATCH
除非您使用 GO 语句,否则您可以在 SQL 语句中声明一次变量
在语句的顶部声明该变量,只更改每个块下的值