我最近将一个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应该是可接受的。
答案 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帮忙!