小玩意:如何克隆一份记录及其子记录

做一个克隆功能, 复制一份记录及其子记录, 除了主键和相关外键换一下, 其它不变。

表面上看起来简单, 但不用循环就要稍多花点心思了。

写一个类似的例子, 以后备用, 也算是造福人类吧。

IF OBJECT_ID('A') IS NOT NULLDROP TABLE AGOIF OBJECT_ID('B') IS NOT NULLDROP TABLE BGOIF OBJECT_ID('C') IS NOT NULLDROP TABLE CGOCREATE TABLE A(Aid INT PRIMARY KEY,Aname NVARCHAR(10))GOCREATE TABLE B(Bid INT PRIMARY KEY,Aid INT,Bname NVARCHAR(10))GOCREATE TABLE C(Cid INT PRIMARY KEY,Bid INT,Cname NVARCHAR(10))GOSET NOCOUNT ONINSERT INTO A(Aid,Aname) VALUES(1,'王大爷')INSERT INTO B(Bid,Aid,Bname) VALUES(10,1,'大儿')INSERT INTO B(Bid,Aid,Bname) VALUES(11,1,'二儿')INSERT INTO C(Cid,Bid,Cname) VALUES(100,10,'大儿儿')INSERT INTO C(Cid,Bid,Cname) VALUES(101,10,'大儿二儿')INSERT INTO C(Cid,Bid,Cname) VALUES(110,11,'二儿儿')INSERT INTO C(Cid,Bid,Cname) VALUES(111,11,'二儿二儿')INSERT INTO C(Cid,Bid,Cname) VALUES(112,11,'二儿三儿')SELECT * FROM ASELECT * FROM BSELECT * FROM C/*AidAname———– ———-1王大爷BidAidBname———– ———– ———-101大儿111二儿CidBidCname———– ———– ———-10010大儿儿10110大儿二儿11011二儿儿11111二儿二儿11211二儿三儿 */–根据王大爷的记录复制出一份“王二爷”的记录及相关子记录, 子记录除了主键及外键不同之外,其它全部相同–1. 王二爷INSERT INTO A(Aid,Aname) VALUES(2,'王二爷')–2. 王二爷子辈DECLARE @b TABLE(Bid INT,Aid INT,Bname NVARCHAR(10),oldBid INT)INSERT INTO @b(Bid,Aid,Bname,oldBid)SELECT ROW_NUMBER() OVER (ORDER BY bid)+(SELECT MAX(bid) FROM B) AS bid,2 AS aid,Bname,Bid FROM B WHERE aid=1INSERT INTO B(Bid,Aid,Bname)SELECT Bid,Aid,Bname FROM @b–3. 王二爷孙辈INSERT INTO C(Cid,Bid,Cname)SELECT ROW_NUMBER() OVER (ORDER BY cid)+(SELECT MAX(cid) FROM c) AS cid, b2.Bid, c2.CnameFROM C c2 INNER JOIN @b b2 ON c2.bid=b2.oldBidSELECT * FROM ASELECT * FROM BSELECT * FROM CDROP TABLE ADROP TABLE BDROP TABLE C/*AidAname———– ———-1王大爷2王二爷BidAidBname———– ———– ———-101大儿111二儿122大儿132二儿CidBidCname———– ———– ———-10010大儿儿10110大儿二儿11011二儿儿11111二儿二儿11211二儿三儿11312大儿儿11412大儿二儿11513二儿儿11613二儿二儿11713二儿三儿 */

,自己变得跟水晶一般透明,

小玩意:如何克隆一份记录及其子记录

相关文章:

你感兴趣的文章:

标签云: