版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、不同数据库之间复制表的数据的方法当表目标表存在时:insertinto目的数据库.表select*from源数据库.表当目标表不存在时:select*into目的数据库.表from源数据库.表-如果在不同的SQL之间:insertintoopenrowset('sqloledb','目的服务器名''sa'",目的数据库.dbo.表)select*from源数据库.表-或用链接服务器:创建链接服务器execsp_addlinkedserver'srv_lnk',",'SQLOLEDB','
2、远程服务器名'execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa','密码'execsp_serveroption'srv_lnk','rpcout','true'-这个允许调用链接服务器上的存储过程go-查询示例select*fromsrv_lnk.数据库名.dbo.表名-导入示例select*into表fromsrv_lnk.数据库名.dbo.表名go-后删除链接服务器execsp_dropserver'srv_l
3、nk','droplogins'-如果是将一个数据库中的数据全部复制到另一个数据库,而且两个库结构完全一样的话,就用备份/恢复的方式:/*-将一个数据库完整复制成另一个数据库-*/*-调用示例execp_CopyDbddbname='test'-*/ifexists(select*fromdbo.sysobjectswhereid=object_id(N'dbo.p_CopyDb')andOBJECTPROPERTY(id,N'IsProcedure')=1)dropproceduredbo.p_CopyDbGOcreat
4、eprocp_CopyDbsdbnamesysname=",-定义要复制的数据库名,默认为当前数据库ddbnamesysname,-定义复制后生成的数据库名overexistbit=1,-是否覆盖已经存在的数据库killuserbit=1-是否关闭用户使用进程,仅overexist=l时有效asdeclaresqlvarchar(8000),bpathvarchar(8000),rpathvarchar(8000)-得到要复制的数据库名ifisnull(sdbname,")="setsdbname=db_name()-得到临时备份数据目录及文件名selectbpa
5、th=rtrim(reverse(filename)frommaster.sysfileswherename='master'selectbpath=substring(bpath,charindex('',bpath)+l,8000),bpath=reverse(substring(bpath,charindex('',bpath),8000)+'BACKUP'mailto:+sdbname+%20_%20+convert(varchar,getdate(),112)+'_'+replace(convert(va
6、rchar,getdate(),108),':',")+'.bak'-生成数据库备份语句,进行数据库备份setsql='backupdatabasemailto:%20+sdbname+'tomailto:disk=%20%20%20+bpath+'''withNOINIT'exec(sql)-根据备份文件恢复成新的数据库(完成复制工作)setsql='restoredatabasemailto:%20+ddbname+'frommailto:disk=%20%20%20+bpath+
7、39;withfile=1'+casewhenoverexist=lthen',replace'else''end-得到数据库存放的默认目录-得到SQL安装时设置的数据文件路径selectrpath=rtrim(reverse(filename)frommaster.sysfileswherename='master'selectrpath=reverse(substring(rpath,charindex('',rpath),8000)-添加移动逻辑文件的处理-从备份文件中获取逻辑文件名declarelfnnvarcha
8、r(128),tpchar(1),iint-创建临时表,保存获取的信息createtable#tb(lnnvarchar(128),pnnvarchar(260),tpchar(1),fgnnvarchar(128),sznumeric(20,0),Msznumeric(20,0)-从备份文件中获取信息insertinto#tbexec('restorefilelistonlyfrommailto:disk=%20%20%20+bpath+)declare#fcursorforselectln,tpfrom#tbopen#ffetchnextfrom#fintolfn,tpseti=0
9、whilefetch_status=0beginselectsql=sql+',movemailto:%20%20%20+lfn+tomailto:%20%20%20+rpath+ddbname+cast(iasvarchar)+casetpwhen'D'then'.mdf'''else'.ldf'''end,i=i+1fetchnextfrom#fintolfn,tpendclose#fdeallocate#f-关闭用户进程处理ifoverexist=landkilluser=lbegindeclares
10、pidvarchar(20)declare#spidcursorforselectspid=cast(spidasvarchar(20)frommaster.sysprocesseswheredbid=db_id(ddbname)open#spidfetchnextfrom#spidintospidwhilefetch_status=0beginexec('killmailto:%20+spid)fetchnextfrom#spidintospidendclose#spiddeallocate#spidend-恢复数据库exec(sql)-删除备份的临时文件setsql='de
11、l"mailto:%20+bpath+%20"execmaster.xp_cmdshellsql,no_outputselectsql,bpath,rpathgo-如果一定要逐个表复制,用:use源库goexecsp_msforeachtable'select*into目标库.?from?'最好的办法是用DTS(导入导出工具)做好DTS包。-如果两个库的结构有些不同,就用:/*-数据库数据复制将一个数据库中的数据复制到另一个数据库如果某列在目标数据库中为标识列,将不会被复制适用范围:数据库结构发生了变化,想将旧数据库进行升级这样就可以根据新的数据库结构创建一
12、个空库,然后将旧数据库的所有数据复制到新库中-*/*-调用示例execp_copydb'源数据库','目标数据库'execp_copydb'acc_五医','acc_演示数据8'-*/ifexists(select*fromdbo.sysobjectswhereid=object_id(N'dbo.p_copydb')andOBJECTPROPERTY(id,N'IsProcedure')=1)dropproceduredbo.p_copydbGOcreateprocp_copydbo_dbname
13、sysname,-要复制数据的数据库-源数据库n_dbnamesysname,-接收数据的数据库-目标数据库cleardbbit=0-清空目标数据库asdeclaresqlnvarchar(4000)-禁用约束,防止复制时的数据冲突setsql='declare#tbccursorforselectname,tbname=object_name(parent_obj)frommailto:%20+n_dbname+%20.sysobjectswherextypein("C","F")'exec(sql)declarenamesysname
14、,tbnamesysnameopen#tbcfetchnextfrom#tbcintoname,tbnamewhilefetch_status=Obeginsetsql='altertablemailto:%20+n_dbname+%20.%20+tbname+NOCHECKCONSTRAINT'+name+''exec(sql)fetchnextfrom#tbcintoname,tbnameendclose#tbc-复制数据declaresql1varchar(8000)setsql='declare#fr
15、om'mailto:+o_dbname+%20.sysobjectsainnerjoin'mailto:+n_dbname+%20.=wherea.xtype="U"andb.xtype="U"'exec(sql)open#tbfetchnextfrom#tbintotbnamewhilefetch_status=0beginselectsqll=",sql='selectsqll=sqll+","++丁from(selectnam
16、efrommailto:%20+o_dbname+%20.syscolumnswhereidin(selectidfrommailto:%20+o_dbname+%20.sysobjectswheremailto:name=%20%20%20+tbname+)ainnerjoin(selectnamefrommailto:%20+n_dbname+%20.syscolumnswherestatus<>0x80andidin(selectidfrommailto:%20+n_dbname+%20.sysobjectswheremailto:name=%20%20%20+tbname+
17、)='execsp_executesqlsql,N'sqllnvarchar(4000)out',sqlloutselectsql1=substring(sqll,2,8000)exec('insertintomailto:%20+n_dbname+%20.%20+tbname+%20(%20+sqll+')selectmailto:%20+sql1+frommailto:%20+o_dbname+%20.%20+tbname+%20)iferror<>0print('insertintomailto:%20+n_dbname+%20.%20+tbname+%20(%20+sqll+')selectmailto:%20+sql1+frommailto:%20+o_dbname+%20.%20+tbname+%20)fetchnextfrom#
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版新型食用菌保健品区域总代销售与售后服务合同3篇
- 二零二五年度环保节能产品推广合同4篇
- 2025年陶瓷原料质量检测与认证合同2篇
- 2025年度门禁系统设备租赁与运营维护协议4篇
- 二手车交易市场租赁合同范本2024年适用
- 二零二五年度办公楼窗帘节能改造承包合同4篇
- 2025年度智慧停车场设计与运营服务合同4篇
- 2025年文化中心场地租赁合同终止及合作开发意向书3篇
- 天津市应急保障2025年度专用车辆租赁合同2篇
- 二零二五年度土地承包经营权转让合同流转规范版
- 2024-2025学年山东省潍坊市高一上册1月期末考试数学检测试题(附解析)
- 江苏省扬州市蒋王小学2023~2024年五年级上学期英语期末试卷(含答案无听力原文无音频)
- 数学-湖南省新高考教学教研联盟(长郡二十校联盟)2024-2025学年2025届高三上学期第一次预热演练试题和答案
- 决胜中层:中层管理者的九项修炼-记录
- 幼儿园人民币启蒙教育方案
- 单位就业人员登记表
- 卫生监督协管-医疗机构监督
- 记录片21世纪禁爱指南
- 腰椎间盘的诊断证明书
- 移动商务内容运营(吴洪贵)任务七 裂变传播
- 单级倒立摆系统建模与控制器设计
评论
0/150
提交评论