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

Sql 如何修复错误变量名已声明。变量名在查询批处理或存储过程中必须是唯一的?,sql,sql-server,ssms,Sql,Sql Server,Ssms,我正在SQL Server中创建一个脚本,它组合了多个查询。在每个查询中,我都声明一个变量@FieldName。当我运行脚本时,它给出以下错误 Msg 134,第15级,状态1,第24行变量名“@FieldName”有 已经申报了。变量名在查询中必须是唯一的 批处理或存储过程 这些查询有更多的代码,我只是提供了最少的代码 脚本: BEGIN TRY BEGIN TRANSACTION Print '1' DECLARE @FieldName NVARCHAR

我正在SQL Server中创建一个脚本,它组合了多个查询。在每个查询中,我都声明一个变量
@FieldName
。当我运行脚本时,它给出以下错误

Msg 134,第15级,状态1,第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

我们如何解决这个问题?

有两种可能性。使用
GO
分离批次。(有效地分割了查询的范围。所有先前声明的变量在下一个查询批中都不可用。)

或者只声明一次变量并使用
SET
大多数情况下,您都希望选项2重用声明。但有时,当您的语句需要
GO
(创建视图)时,您需要使用选项1

选择1 选择2
除非使用GO语句,否则可以在SQL语句中声明一次变量


在语句顶部声明该变量,只需更改每个块下的值即可
执行
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
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