这实际上毁了我的一天。我有很多表,表之间有许多FK关系。其中一个表(我们称其为表A)具有计算列,该列是通过具有架构绑定的UDF计算得到的,并且还具有全文索引。
如果我编辑任何以任何方式与带有全文索引的计算列(表A)的表(例如通过FK)相关的表(称为表B),然后保存它,则会发生以下情况:
对表(表B)的更改已保存
我收到错误:“列'abcd'没有全文索引。”关于我什至没有编辑过的表A,然后“用户从保存对话框中取消了”
删除了与表B中所有表的所有FK关系
这到底是怎么回事???有人可以向我解释这种情况如何发生吗?
最佳答案
我遇到过同样的问题。正如Will A所说,管理工作室将执行以下步骤来更新表及其外键:
创建一个名为temp_的新表
将内容从旧表复制到新表
删除所有约束,索引和外键
放下旧桌子
重命名新表为=旧表
重新创建外键,索引和约束
我可能以错误的顺序排列了前3个,但您明白了。
就我而言,我失去了整个表,而不仅仅是外键。我个人不喜欢这样做的方式,因为必须在包含大量数据的表上重新创建索引会非常耗时。如果更改很小,我通常会在T-SQL中自己完成。
在执行更改脚本之前,请先检查更改脚本,确保它看起来合理。
@OMGPonies,如果表中有数据,为什么不能删除外键?当然可以。仅在具有数据的表上创建外键时有限制,但前提是要打破约束。但是,即使在创建密钥时也可以通过使用WITH NOCHECK选项来避免这种情况。是的,我知道当您尝试更新损坏的结果集时它将损坏。
关于sql-server - SQL Server Mgmt Studio弄乱了我的数据库!,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3224011/