" WITH CHECK OPTION"和" TOP"升级到SQL Server 2016时导致错误

时间:2017-02-28 23:59:43

标签: sql sql-server tsql sql-server-2014 sql-server-2016

在寻求将Microsoft SQL Server从2014年升级到2016年的过程中,我运行了Microsoft的数据迁移助手,并在使用表中的视图时发现了WITH CHECK OPTION的重大更改。

虽然通过微软的各个页面寻求帮助,但似乎它们都是死路一条。我们目前的兼容版本是120,一个修复选项是降级到90;但这是不可能的。

enter image description here

代码破解是:

CREATE VIEW [table]
AS  
    SELECT TOP 1000000
        [Id],
        [UserName],
        [Firstname]
    FROM 
        [Users] WITH (NOLOCK)
    WITH CHECK OPTION 
GO

有人对此有解决方法吗?否则似乎升级到2016版本将无法正常工作。

1 个答案:

答案 0 :(得分:3)

因此,如果您按照MSDN官方文档Create View (Transact-SQL)进行操作,则会在 UPDATABLE VIEWS 部分中注明以下内容:

  

只要满足以下条件,您就可以通过视图修改基础基表的数据:

     

...

     

TOP不会在视图的select_statement中与WITH CHECK OPTION子句一起使用。

因此,SQL Server团队极有可能将这种不可能性强制为CHECK

  

强制对视图执行的数据修改语句遵循select_statement中设置的条件。

显然,你将无法正常编辑组合的代码,所以答案很清楚。