SQL Server:如何使服务器检查其所有检查约束?
似乎企业管理器* 生成的某些脚本(或不生成,这并不重要)创建了检查约束WITH NOCHECK。
现在,当任何人修改表时,SQL Server 就会陷入困境跨越失败的检查约束,并抛出错误。
我可以让 SQL 通过其所有检查约束并检查它们吗?
运行:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
仅启用之前禁用的检查约束,但实际上并不检查它们。
脚注
* SQL Server 2000
It seems that some scripts generated by Enterprise Manager* (or not, it doesn't matter) created check constraints WITH NOCHECK.
Now when anyone modifies the table, SQL Server is stumbling across failed check constraints, and throwing errors.
Can i make SQL go through all its check constraints, and check them?
Running:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
only enables previously disabled check constraints, it doesn't actually check them.
Footnotes
* SQL Server 2000
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS 实际上不会使您的约束受到信任。 它将报告任何违反约束的行。 要真正使所有约束都可信,您可以执行以下操作:
在 SQL Server 2000 中,您可以通过以下方式查找任何不受信任的约束:
然后通过检查重新启用约束:
注意:在最后一条语句中,
WITH CHECK CHECK
不是拼写错误。 “WITH CHECK”将检查所有表数据以确保不存在违规,并使约束可信,同时检查将确保启用约束。也可以看看:
http://sqlblog.com/blogs/tibor_karaszi /archive/2008/01/12/non-trusted-constraints.aspx
http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints-and-performance.aspx
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS won't actually make your constraints trusted. It will report any rows that violate the constraints. To actually make all of your constraints trusted, you can do the following:
In SQL Server 2000 you can find any untrusted constraints with:
Constraints are then re-reenabled with check:
Note: on the last statement, the
WITH CHECK CHECK
is not a typo. The "WITH CHECK" will check all table data to ensure there are not violations, and will make the constraint trusted, while the check will make sure the constraints is enabled.See also:
http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx
http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints-and-performance.aspx
找到它:
检查所有表的所有约束当前数据库,无论约束是否启用:
仅检查启用的约束:
Found it:
Checks all constraints on all tables in the current database, whether the constraint is enabled or not:
To check only enabled constraints:
执行此操作:
说明: 你能相信你的约束吗?
do this:
Explanation: Can you trust your constraints?