如何修复变量名已声明的错误变量名在查询批处理或存储过程中必须是唯一的?

hsvhsicv  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(522)

我正在sql server中创建一个脚本,它将多个查询组合在一起。在每个查询中,我都声明一个变量 @FieldName . 当我运行脚本时,它会给出以下错误。
msg 134,level 15,state 1,line 24变量名'@fieldname'已经声明。变量名在查询批处理或存储过程中必须是唯一的。
这些查询有更多的代码,我只是提供最少的代码。
脚本:

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

如何解决这个问题?

wmtdaxz3

wmtdaxz31#

有两种可能。使用 GO 分批处理(有效地分割查询的范围。所有先前声明的变量在下一个查询批中都不可用。)
或者只声明一次变量并使用 SET 大多数情况下,您都希望选项2重用声明。但有时当你有需要 GO (创建视图)然后您需要使用选项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
lf5gs5x2

lf5gs5x22#

除非使用go语句,否则可以在sql语句中声明一个变量
在语句顶部声明该变量,只需更改每个块下的值

相关问题