安装自定义 CLR 对象后,Sql Server Developer Tools (SSDT) VS2012 将不允许更新。错误是“检测到源架构漂移。按比较刷新。刷新后会发生同样的事情。
尝试在设置中,我将对象设置为存储过程。设置->常规->阻止可能的数据丢失->尝试打开和关闭。
安装自定义 CLR 对象后,Sql Server Developer Tools (SSDT) VS2012 将不允许更新。错误是“检测到源架构漂移。按比较刷新。刷新后会发生同样的事情。
尝试在设置中,我将对象设置为存储过程。设置->常规->阻止可能的数据丢失->尝试打开和关闭。
这种循环也可能是由于引用的 SSDT 项目未能构建造成的。引用的项目可能丢失、卸载或有错误导致比较无法完成。
这不是答案,而是解决此问题的线索。
我打算将一个列从 varchar[200] 更新为 varchar[MAX] 并且也遇到了这个问题。所以我登录服务器并尝试通过安装在那里的 SQL Management Studio 手动更新数据库,我收到了这个错误:
"Saving changes is not permitted. The changes you have made require the folloing tables to be drpped and re-created. You have either made changes to a table that can't be re-created or enable the option Prevent saving changes that require the table to be re-created."
似乎重新创建表是如此危险,以至于“阻止/取消阻止可能的数据丢失”无法处理。所以我认为只有当我们能够绕过这个 LOCAL 警告时,我们才能远程更新数据库。
但是,为什么 [200] 到 [max] 会导致重新创建表?这没有任何意义。我尝试了 [200] 到 [1000],但效果不佳。这可能是这个问题的关键。
而且,如果您在 VS 的服务器资源管理器中执行相同的更新,而不是 SQL Management Studio,它就可以工作。再说一遍,为什么?
当数据库用户“更改”时,可能会发生这种情况。
以下相当可怕的论坛页面讲述了外国黑客试图暴力访问“sa”数据库用户的问题,每次尝试都会更改 sa 用户的日期时间戳(这被视为模式漂移):
这里还提到你可以查询 sa-user 几次,看看你是否发生了这种情况:
SELECT * FROM sys.server_principals WHERE principal_id=1
我目前遇到了同样的问题(正在修改 sa 用户;我对黑客一无所知)并且尚未找到解决方案。
编辑properties
- 我通过>打开登录 Windows 防火墙logging
,我们在端口 3071 上设置了一个阻止规则,该端口有很多无法解释的流量。然后问题就消失了。
我尝试以管理员身份运行 VS,它成功了。