日期:2014-05-18  浏览次数:20611 次

高难度的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是主,所以在插入临时表A之前将A1转为new_A1,然后插入临时B表(之前也要进行相同转换)
------解决方案--------------------
LZ为什么要用两个临时表呢,完全可以用两个view就行了

create view dbo.vw_A
as
select ( 'NEW ' + ID) as ID,[name] from A where left(ID,2)= 'A1 '

create view dbo.v_B
as
select ( 'NEW '+ID) as UD,( 'NEW '+[Name]) as [name],[order] from B