程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> 小玩意:如何克隆一份記錄及其子記錄

小玩意:如何克隆一份記錄及其子記錄

編輯:SyBase教程

小玩意:如何克隆一份記錄及其子記錄


做一個克隆功能, 復制一份記錄及其子記錄, 除了主鍵和相關外鍵換一下, 其它不變。

表面上看起來簡單, 但不用循環就要稍多花點心思了。

寫一個類似的例子, 以後備用, 也算是造福人類吧。

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          二兒三兒 
*/


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved