国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

數據庫復制

2024-07-21 02:08:43
字體:
來源:轉載
供稿:網友

/*--數據庫數據復制

 將一個數據庫中的數據復制到另一個數據庫
 如果某列在目標數據庫中為標識列,將不會被復制

 適用范圍:數據庫結構發生了變化,想將舊數據庫進行升級
  這樣就可以根據新的數據庫結構創建一個空庫,然后
  將舊數據庫的所有數據復制到新庫中
--*/

/*--調用示例

 exec p_copydb '源數據庫','目標數據庫'
 exec p_copydb 'acc_五醫','acc_演示數據8'
--*/

if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[p_copydb]') and objectproperty(id, n'isprocedure') = 1)
drop procedure [dbo].[p_copydb]
go

create proc p_copydb
@o_dbname sysname,  --要復制數據的數據庫--源數據庫
@n_dbname sysname,  --接收數據的數據庫--目標數據庫
@cleardb bit=0   --清空目標數據庫
as
declare @sql nvarchar(4000)

--禁用約束,防止復制時的數據沖突
set @sql='declare #tbc cursor for select name,tbname=object_name(parent_obj)
 from '[email protected]_dbname+'..sysobjects where xtype in(''c'',''f'')'
exec(@sql)
declare @name sysname,@tbname sysname
open #tbc
fetch next from #tbc into @name,@tbname
while @@fetch_status=0
begin
 set @sql='alter table '[email protected]_dbname+'..['[email protected]+'] nocheck constraint ['[email protected]+']'
 exec(@sql)
 fetch next from #tbc into @name,@tbname
end
close #tbc

--復制數據
declare @sql1 varchar(8000)
set @sql='declare #tb cursor for select a.name from '
 [email protected]_dbname+'..sysobjects a inner join '
 [email protected]_dbname+'..sysobjects b on a.name=b.name
  where a.xtype=''u'' and b.xtype=''u'''
exec(@sql)
open #tb
fetch next from #tb into @tbname
while @@fetch_status=0
begin
 select @sql1=''
  ,@sql='select @[email protected]+'',[''+a.name+'']'' from(
  select name from '[email protected]_dbname+'..syscolumns where id in
  (select id from '[email protected]_dbname+'..sysobjects where name='''[email protected]+''')
 ) a inner join (
  select name from '[email protected]_dbname+'..syscolumns where status<>0x80 and id in
  (select id from '[email protected]_dbname+'..sysobjects where name='''[email protected]+''')
 ) b on a.name=b.name'
 exec sp_executesql @sql,n'@sql1 nvarchar(4000) out',@sql1 out

 select @sql1=substring(@sql1,2,8000)
 exec('insert into '[email protected]_dbname+'..['[email protected]+']('[email protected]
  +') select '[email protected]+' from '[email protected]_dbname+'..['[email protected]+']')
 if @@error<>0
  print('insert into '[email protected]_dbname+'..['[email protected]+']('[email protected]
   +') select '[email protected]+' from '[email protected]_dbname+'..['[email protected]+']')
 fetch next from #tb into @tbname
end
close #tb
deallocate #tb

--數據復制完成后啟用約束
open #tbc
fetch next from #tbc into @name,@tbname
while @@fetch_status=0
begin
 set @sql='alter table '[email protected]_dbname+'..['[email protected]+'] check constraint ['[email protected]+']'
 exec(@sql)
 fetch next from #tbc into @name,@tbname
end
close #tbc
deallocate #tbc
go



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长武县| 额敏县| 疏勒县| 阳江市| 新密市| 南通市| 苍溪县| 普宁市| 华亭县| 盘锦市| 石门县| 水富县| 邯郸县| 肥东县| 永安市| 铁力市| 舟曲县| 汉源县| 洞口县| 交城县| 长武县| 陈巴尔虎旗| 盖州市| 利川市| 旺苍县| 霍林郭勒市| 津南区| 永泰县| 夏津县| 横山县| 南召县| 修武县| 台江县| 连南| 黄大仙区| 合水县| 卢湾区| 和硕县| 阿图什市| 宝兴县| 自治县|