很急!!!高分请教

wind321 2002-05-21 03:59:46
我在SQL SERVER中建了两张表
表A:custID,name
表B:orderid,amount,并且B中有来自A的外关键字custID.
然后在A,B上输入数据,建一视图view_AB,
其中括字段为:custID,name,orderid,amount
接下来对view_AB作如下操作:选中一条记录,按del键。
问题来了,SQL SERVER总提示:delete statement conflicted with

column reference constraint 'FK_A_B'.the conflict occurred.....
这里的英文意思我都懂,但就是不知道如何解决??客户端是通过视图来获

取数据的,也是通过它来增删记录的,总不能分开两个表吧。各位大师们指

点一下啊!!
...全文
26 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hh_fwhy 2002-05-23
  • 打赏
  • 举报
回复
你这个问题应该是在程序里碰到吧??
其实比较好办,如果是2000,就同楼上 dlkfth(工资低呀)
如果是2000,你可以把触发器写到子表中,在程序中先删掉子表,再通过子表的触发器自动删掉主表(当然,仅用于两表,一主一从),从表面看上去就像你从视图上删除一样.
至于 firetoucher(蹈火者) 兄的话我不太赞同,触发器用多了的确不好,因为难以控制,至于什么存储过程也要在特殊情况下才用就实在是错了.用存储过程可以优化你许多查询或者工作性能,是数据库系统优化设计的一个方面和表现!
wind321 2002-05-23
  • 打赏
  • 举报
回复
hh_fwhy:能不能举例说说你指的子表,主表是什么?我不大懂。还有就是,其实firetoucher和你的看法是一致的:)
firetoucher 2002-05-22
  • 打赏
  • 举报
回复
一般没有特殊情况,不采用触发器,用存储过程之类的东东,触发器只是在不得已的情况下使用,因为它会让体系看起来复杂,而且不易扩充
wind321 2002-05-22
  • 打赏
  • 举报
回复
是这样啊!感谢大伙帮忙。但还有一个小问题,照楼上说的,当一个视图显示关联两个表的数据时,我们不能用视图来进行更新操作。一旦进行视图分割,又难以在客户端显示完整的数据(因客户习惯通过视图浏览从多张基张中提取出来的数据)。要么就是在客户端编程以获取各分割后的视图的部分记录集并对其操作,但这样又使对记录集操作难度加大的。另外,如果类似的情况者用触发器,太多的触发器交织在一起,一出错要查起来又好像很难的样子,也不知是我的数据库设计得不好,还是对触发器不熟悉的原因。总之觉得SERVER/CLIENT结构体系的系统时,想要做一个模块结构好的系统好难。也不知大伙在开发SERVER/CLIENT结构体系的系统时,有什么体会没有?不妨说来听听:)
hycao 2002-05-21
  • 打赏
  • 举报
回复
通过视图进行的数据更改会更改基表,但视图中的数据更改不能影响一个以上的基表。也就是说,你可以更改从两个或多个表派生的视图,但每个更新或修改仅能影响一个表。
而你要对视图的记录delete,很显然影响到了两个表。
MFC2001 2002-05-21
  • 打赏
  • 举报
回复
视图的删改添加是有限制的!

建议对视图建立INSTEAD OF 触发器
OpenVMS 2002-05-21
  • 打赏
  • 举报
回复
把更新操作写在带instead of的trigger里,
CREATE TRIGGER myView_AB ON view_AB
INSTEAD OF INSERT,DELETE,UPDATE
AS
BEGIN
...
END
weixy 2002-05-21
  • 打赏
  • 举报
回复
可以按下列方式通过视图修改数据:

使用具有支持 INSERT、UPDATE 和 DELETE 语句的逻辑的 INSTEAD OF 触发器。


使用修改一个或多个成员表的可更新分区视图。
如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新:

如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新:

视图在视图定义的 FROM 子句中包含至少一个表;视图不能只基于一个表达式。


在选择列表中没有使用聚合函数(AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、VARP)或 GROUP BY、UNION、DISTINCT 或 TOP 子句。但是,可以在 FROM 子句定义的子查询范围内使用聚合函数,前提条件是聚合函数生成的派生值没有修改过。
dlkfth 2002-05-21
  • 打赏
  • 举报
回复
你用的sqlserver2000,使用INSTEAD OF 替换触发器
把你对试图的更新都写到这个触发器里

34,590

社区成员

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

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