主键被更新,外键却超越了约束,这算不算是一个BUG呢?

dotAge 2002-09-05 11:55:31
--表结构如下,简单地说就是ID为tbItemGroup的主键,SalesAccount为参照tbAccount的外键

CREATE TABLE [dbo].[tbItemGroup] (
[ID] [char] (8) NOT NULL ,
[Name] [nvarchar] (50) NOT NULL ,
[SalesAccount] [char] (8) NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[tbItemGroup] WITH NOCHECK ADD
CONSTRAINT [PK_tbPartGroup] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[tbItemGroup] ADD
CONSTRAINT [FK_tbItemGroup_Account] FOREIGN KEY
(
[SalesAccount]
) REFERENCES [dbo].[tbAccount] (
[AccountID]
)
GO

现在如果我:

update tbItemGroup SET salesAccount='一个tbAccount中不存在的键' WHERE ID='tbItemGroup中存在的主键'

系统当然会告诉我这个错误:

服务器: 消息 547,级别 16,状态 1,行 1
UPDATE 语句与 COLUMN FOREIGN KEY 约束 'FK_tbItemGroup_account' 冲突。该冲突发生于数据库 'xxxxx',表 'tbAccount', column 'accountID'。
语句已终止。

我再这样:

update tbItemGroup SET ID='tbItemGroup中不存在的值',salesAccount='一个tbAccount中不存在的键' WHERE ID='tbItemGroup中存在的主键'

系统同样出现上述错误:

但如果我这样:

update tbItemGroup SET ID='原值,即WHERE条件后的那个值',salesAccount='一个tbAccount中不存在的键' WHERE ID='tbItemGroup中存在的主键'

它就成功执行了,此时数据库中就出现了一条非法的数据

请问,这是SQL SERVER 2000已知的错误吗?我已经打了SP2补丁了
谢谢!
...全文
66 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dotAge 2002-09-26
  • 打赏
  • 举报
回复
注,该问题并没有解决,如果不是BUG,那应该就是SQL SERVER的数据文件已经损坏。

为了遵守规则,我不得不结贴
xncat 2002-09-06
  • 打赏
  • 举报
回复
一般来说不太可能,不过dotAge (老朽) 坚持说测试严谨正确的话,我对WITH NOCHECK 是否在从中有影响感到怀疑,这方面涉及的少,很想了解了解
dotAge 2002-09-06
  • 打赏
  • 举报
回复
谢谢各位的回复!

这个问题应该说我经过了比较严谨的测试,从我提问的过程你们也应该可以看到,各位不妨在自己的机器上作个测试。

我从来没有用过视图。
而且我想你(周围)可能看错题了,上面两次错误实际是正确的结果,而最后一次成功执行才是错误的结果。
zou5655 2002-09-06
  • 打赏
  • 举报
回复
你是不是用视图将两个表关联了!!如果关联了的话,主表中没有的记录不在从表中添加或修改!!你好象就是这个错误!!你的两次修改都修改了外键哟!!!
Yang_ 2002-09-06
  • 打赏
  • 举报
回复
再测试!
不可能的!

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧