SQL Server 2016存储过程语法错误

时间:2018-08-02 20:04:34

标签: sql-server stored-procedures sql-server-2016

我最近将一个SQL Server 2008数据库还原到SQL Server 2016实例中。大多数功能似乎正常运行,但是我的许多存储过程(包括对名为SYS_USER的应用程序数据库表的更新)均失败,并出现以下错误:

  

消息102,级别15,状态1,过程SYS_USERupdate,第35行[批处理开始第0行]
  “ @errorNumber”附近的语法不正确

该数据库没有名为SYS_Userupdate的存储过程,并且该过程的代码均未包含术语@errorNumber。我试图直接在SQL Server Management Studio中从失败的过程之一运行SQL查询,并收到相同的错误消息。这是失败的SQL查询:

UPDATE SYS_USER
SET SYS_USER_LGF_DT = GETDATE()
WHERE SYS_USER_ID = @SYS_USER_ID

我为@SYS_USER_ID变量插入了一个有效值。与其他表相关的类似查询运行没有问题。所有存储过程都可以在SQL Server 2008实例上正常运行,没有错误。另外,数据库compatibility_level到100,这对于SQL Server 2016应该是可接受的。

2 个答案:

答案 0 :(得分:0)

当您没有在正确版本的SQL Server上运行时,或者数据库的兼容性级别设置不充分时,就会发生这种情况。因此将其更改为130

要检查兼容性级别:

select compatibility_level 
from sys.databases 
where name = '<database name>'

要更改兼容性级别:

alter database <database-name> 
set compatibility level = 130 -- SQL Server 2016

所有SQL版本的兼容性级别列表:ALTER DATABASE (Transact-SQL) Compatibility Level

答案 1 :(得分:0)

重新发布答案,因为它是在对该问题的评论中提出的。解决该问题的方法是,在受影响的表上有一些我不知道存在的触发器。这些触发器的语法错误导致对表的插入和更新查询失败。

感谢Jeroen Mostert https://stackoverflow.com/users/4137916/jeroen-mostert帮忙!