做一個克隆功能, 復制一份記錄及其子記錄, 除了主鍵和相關外鍵換一下, 其它不變。
表面上看起來簡單, 但不用循環就要稍多花點心思了。
寫一個類似的例子, 以後備用, 也算是造福人類吧。
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A GO IF OBJECT_ID('B') IS NOT NULL DROP TABLE B GO IF OBJECT_ID('C') IS NOT NULL DROP TABLE C GO CREATE TABLE A( Aid INT PRIMARY KEY, Aname NVARCHAR(10) ) GO CREATE TABLE B( Bid INT PRIMARY KEY, Aid INT, Bname NVARCHAR(10) ) GO CREATE TABLE C( Cid INT PRIMARY KEY, Bid INT, Cname NVARCHAR(10) ) GO SET NOCOUNT ON INSERT 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 A SELECT * FROM B SELECT * FROM C /* Aid Aname ----------- ---------- 1 王大爺 Bid Aid Bname ----------- ----------- ---------- 10 1 大兒 11 1 二兒 Cid Bid Cname ----------- ----------- ---------- 100 10 大兒兒 101 10 大兒二兒 110 11 二兒兒 111 11 二兒二兒 112 11 二兒三兒 */ --根據王大爺的記錄復制出一份“王二爺”的記錄及相關子記錄, 子記錄除了主鍵及外鍵不同之外,其它全部相同 --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=1 INSERT 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.Cname FROM C c2 INNER JOIN @b b2 ON c2.bid=b2.oldBid SELECT * FROM A SELECT * FROM B SELECT * FROM C DROP TABLE A DROP TABLE B DROP TABLE C /* Aid Aname ----------- ---------- 1 王大爺 2 王二爺 Bid Aid Bname ----------- ----------- ---------- 10 1 大兒 11 1 二兒 12 2 大兒 13 2 二兒 Cid Bid Cname ----------- ----------- ---------- 100 10 大兒兒 101 10 大兒二兒 110 11 二兒兒 111 11 二兒二兒 112 11 二兒三兒 113 12 大兒兒 114 12 大兒二兒 115 13 二兒兒 116 13 二兒二兒 117 13 二兒三兒 */