日期:2014-05-19  浏览次数:20468 次

高难度的SQL 语句 ,高手请入(因为急,所以二发啦,斑竹手下留情)


情况是这样的:
=============================

我的SQL   SERVER2005数据库中有4个数据表,如下结构:
 
表A(ID   CHAR(20),NAME   CHAR(20))     ID为主键
表B(B_ID   CHAR(20),ID   CHAR(20),ORDER   FLOAT)   B_ID为主键,ID为外键   关联   表A   的主键

临时表A(ID   CHAR(20),NAME   CHAR(20))     ID为主键
临时表B(B_ID   CHAR(20),ID   CHAR(20),ORDER   FLOAT)   B_ID为主键,ID为外键   关联   临时表A   的主键


表A中的记录如下:
    A1     张三
    A2     李四


表B中的记录如下:
    A1_1     A1   100
    A1_2     A1   200
    A2_1     A2   400
    A2_2     A2   500
    A2_3     A2   600

  ====================================
我想实现的功能是:将表A和表B中ID= 'A1 '的数据分别插入到临时表A和临时表B后,
再将临时表A和临时表B中 'A1 '改为‘NEW_A1’,希望实现的效果如下:

临时表A中的记录:
    NEW_A1     张三
   
临时表B中的记录:
    NEW_A1_1     NEW_A1   100
    NEW_A1_2     NEW_A1   200

--------------------


我目前可以写出SQL语句   将表A和表B中ID= 'A1 '的数据分别插入到临时表A和临时表B后达到如下效果:

临时表A中的记录:
    A1     张三
   
临时表B中的记录:
    A1_1     A1   100
    A1_2     A1   200

而由于主键和外键关联原因,导致我无法单独将临时表A和临时表B中 'A1 '改为‘NEW_A1’。
由于设计等原因,又不可以将临时表A和临时表B的关联去掉,如何办呢?
请大峡出手!!!




------解决方案--------------------
外键约束设置成“级联更新”,具体操作是进入设计表,然后选择工具条上的“管理关系”,然后再选择“关系”选项卡,在下面就可以看到。
这样只要改A表,B表中的就会跟着变。
------解决方案--------------------
yes
楼上正解。

------解决方案--------------------
顶!二楼。我也学习一下。试试先!!
------解决方案--------------------
楼主 连临时表也家外键啊!猛就一个字拉!
------解决方案--------------------
做个记号。
------解决方案--------------------
没试出来,Ivy_zheng能在说说么?

外键约束设置成“级联更新”,具体操作是进入设计表,然后选择工具条上的“管理关系”,然后再选择“关系”选项卡,在下面就可以看到。

我没找到这个,菜鸟飘过。。
------解决方案--------------------
晕!
------解决方案--------------------
又学了一招,高兴啊
------解决方案--------------------
没试出来,Ivy_zheng能在说说么?

外键约束设置成“级联更新”,具体操作是进入设计表,然后选择工具条上的“管理关系”,然后再选择“关系”选项卡,在下面就可以看到。

我没找到这个,菜鸟飘过。。
------------------------------------------

(1)在表上点右键,选择“设计表”菜单,这样就进入了设计表模式。
(2)工具条上有个倒品字形图标,鼠标放上Tooltip提示是“管理关系...”,点这个。
(3)弹出的对话框上面有4个选项卡,选择“关系”。
(4)如果你没有创建外键,当然就没有。先创建个外键或选择已经创建的外键,下面有级联的选择。
备注:学校里面学的参照完整性中,操作应该有级联、受限、不处理、置空四种方式,但SQL Server好像只支持前两种(也可能我没找到)。具体概念看下课本,我用的是王珊的《数据库系统概率》。