当前位置: 代码迷 >> Sql Server >> tableA写下tableB,再把tableB的PK写回tableA
  详细解决方案

tableA写下tableB,再把tableB的PK写回tableA

热度:29   发布时间:2016-04-24 09:04:13.0
tableA写入tableB,再把tableB的PK写回tableA
有2个TABLE,其中ANo, BNo is PK, auto increament

TABLE AA                                                 TABLE BB
--------------   --------
ANo  BID  Val  Note    BNo  Val
--------------   --------
150      TS   0
151      YH   1
152      BH   1
153      EE   0
154      OP   1

Step 1. 把TABLE AA.Note=1的Val,写入TABLE BB.Val
Step 2. 把TABLE BB.BNo写回对应的TABLE AA.BID

结果如下
TABLE AA                                                 TABLE BB
--------------   --------
ANo  BID  Val  Note    BNo  Val
--------------   --------
150      TS   0      9  YH
151  9    YH   1     10  BH
152  10   BH   1      11  OP
153      EE   0
154  11   OP   1

如何做出上面动作呢(是不是用loop?)?谢谢

------解决思路----------------------
--借用#1楼的数据
--定义表变量
DECLARE @T TABLE(ID INT, val varchar(10))
--先获取自增键
INSERT INTO BB(val)
OUTPUT INSERTED.Bno,INSERTED.val INTO @T
SELECT Val FROM AA
WHERE Note=1
--然后更新自增键
;WITH CTE AS(
SELECT ID,ROW_NUMBER()OVER(ORDER BY val)RN FROM @T
)
,CTE1 AS(
SELECT *,ROW_NUMBER()OVER(ORDER BY val)RN FROM AA
WHERE Note=1
)
UPDATE T1
SET BID=T2.ID
FROM CTE1 T1
JOIN CTE T2 ON T1.RN=T2.RN
--查看结果
SELECT * FROM AA