作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个脚本可以通过检查外键是否存在来更新数据库,如果不存在,则创建它。它由 SQL Management Studio 生成。
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblChangeRequestForecast_tblCostingCenter]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblChangeRequestForecast]'))
ALTER TABLE [dbo].[tblChangeRequestForecast] WITH CHECK ADD CONSTRAINT [FK_tblChangeRequestForecast_tblCostingCenter] FOREIGN KEY([CostingCenterID])
REFERENCES [dbo].[tblCostingCenter] ([CostingCenterID])
GO
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblChangeRequestForecast_tblCostingCenter]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblChangeRequestForecast]'))
ALTER TABLE [dbo].[tblChangeRequestForecast] CHECK CONSTRAINT [FK_tblChangeRequestForecast_tblCostingCenter]
GO
脚本在运行时引发错误:
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_tblChangeRequestForecast_tblCostingCenter". The conflict occurred in database "mydatabase", table "dbo.tblCostingCenter", column 'CostingCenterID'.
这很神秘。就查询而言,没有外键的踪迹,但创建脚本因上述错误而失败。服务器正在运行 SQL Server 2005 SP3 (9.00.4035.00)。
[更新]:我刚刚在 SQL Server 2012 实例上重现了这个问题。所以版本似乎并不太重要。
知道是什么原因造成的吗?
最佳答案
它提示您尝试添加的 FK 约束,因为如果成功应用约束,表中的现有数据将不再有效。
可能意味着有一个或多个 ChangeRequestForecast 记录,其中 CostingCenterID 的值与 CostingCenter.CostingCenterID 不对应。
关于sql-server - SQL Server 2005 中的不可见外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624345/
我是一名优秀的程序员,十分优秀!