源代码的语法问题

Syntax issue on the source

我正在将 SQL Server 2008 数据库迁移到 SQL Server 2019,我使用了 Microsoft 数据迁移助手来查找任何重大更改、问题或语法错误。

我的某些程序出现错误:

Object [dbo].[PROCEDURE1] has syntax errors. Must declare the variable or parameter "@SINI". Error number 70590. For more details, please see: Line 9, Column 16.

这是我的程序:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[PROCEDURE1] 
    @Refer AS varchar, 
    @Ret Decimal OUTPUT
AS
    DECLARE @SIni AS Decimal

    SET @SIni= (SELECT Ini FROM Table1 WHERE Refer = @Refer)
    SET @Ret = @SINI

可能您的服务器具有区分大小写的排序规则。如 documentation 中所述,变量、GOTO 标签、临时存储过程和临时表的 标识符位于服务器实例的默认排序规则中。。您可以使用以下简单语句进行检查:

SELECT SERVERPROPERTY('collation'); 

但是,要修复错误,请使用正确的区分大小写的变量名称:

...
SET @Ret = @SIni
...

作为附加说明,请使用适当的长度声明您的数据类型(如@Larnu 所评论的)。长度属性是可选的,在参数声明的情况下,SQL 服务器将 1 分配为长度,因此 @Refer 参数的数据类型为 varchar(1).