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

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

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

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

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          二儿三儿
*/
时间: 2024-10-14 20:44:14

小玩意:如何克隆一份记录及其子记录的相关文章

使用工作流更新子记录

??Ever wish you could use a workflow to update related/child records? For example, when I update the address on an account, update the address on all of the related contacts. You can, with the help of the very helpful CRM 2011 Distribute Workflow Act

Salesforce 小知识:大量“子记录”的处理方法

大量"子记录"的存放 例子:系统中导入了很多"联系人"(Contact)记录,它们没有具体所属的"客户"(Account)记录.那么我们就要将它们作为"子记录"临时保存在一个Account记录下. 问题:当保存Contact和Account的关系时,系统会同时锁定这两条记录.那么如果要利用多线程同时保存大量的Contact记录到同一个Account记录下,很有可能会出错. 解决方案: 尽可能的在同一个Account记录下保存少

DNS记录类型介绍(A记录、MX记录、NS记录等)

DNS A记录 NS记录 MX记录 CNAME记录 TXT记录 TTL值 PTR值 建站名词解释:DNS A记录 NS记录 MX记录 CNAME记录 TXT记录 TTL值 PTR值 泛域名 泛解析 域名绑定 域名转向 1.DNS:Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统.  DNS:Domain Name Server 域名服务器 域名虽然便于人们记忆,但网络中

A记录、CNAME、MX记录、NS记录

1. A记录(IP指向) 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器找到相应网页的功能. 说明:指向的目标主机地址类型只能使用IP地址. 2. CNAME(别名指向) 通常称别名指向.您可以为一个主机设置别名.相当于用子域名来代替ip地址,优点是如果ip地址变化,只需要改动子域名的解析,而不需要逐一改变ip地址解析. 说明: (1)CNAME的目标主机地址只能使用主机名,不能使用IP地址: (2)主机名前不能有任何其他前缀,如:http://等是

什么是A记录、MX记录、CNAME记录详细介绍

什么是A记录: A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录.用户可以将该域名下的网站服务器指向到自己的web server上.同时也可以设置域名的子域名. 通俗来说A记录就是服务器的IP,域名绑定A记录就是告诉DNS,当你输入域名的时候给你引导向设置在DNS的A记录所对应的服务器. 如何增加A记录 又称IP指向,用户可以在此设置二级域名并指向到自己的WEB服务器的IP地址上,从而实现通过域名找到服务器找到相应网页的功能.  什么是MX记录: 邮件路由记录,用户可以将

DNS解析中的A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发等

AA记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录 NSNS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录 SOASOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中标记哪一台是主服务器 MXMX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录.建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录 TXTTXT记录: 可任意填写,可为空.一般做

如何实现系统记录变更的记录功能

在程序操作中,我们需要把记录变更操作记录下来,通用权限管理系统正好有这个表,下面参照这个表创建自己的修改记录表,表结构如下 用代码生成器的截图如下 实体类 1 //----------------------------------------------------------------------- 2 // <copyright file="BASEMODIFYRECORDEntity.cs" company="ZTO"> 3 // Copyri

清除Centos系统用户登录记录和命令记录

echo > /var/log/wtmp #清除用户登录记录和命令记录 echo > /var/log/btmp echo > /var/log/secure #如果没有这个文件,重启syslog进程service syslog restart echo > .bash_history history -c #清除命令记录

域名解析中A记录、CNAME、MX记录、NS记录的区别和联系

可以看出加了www.和不加www之后的区别. 可以看出域名解析中有几种记录,A记录,CNAME CNAME记录是域名指向另一个域名A记录是域名指向IP地址 A记录 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器.说明:·指向的目标主机地址类型只能使用IP地址: CNAME 通常称别名指向.您可以为一个主机设置别名.比如设置test.mydomain.com,用来指向一个主机www.rddns.com那么以后就可以用test.mydomain.com来