将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
18 个解决方案
#1
备份,ftp bak文件到另外个服务器上还原
#2
仅仅是1个表的数据的或可以保存为csv文件或者excel,通过ftp传过去,然后在服务器上导入
根据导入导出向导自己选下就可以了
根据导入导出向导自己选下就可以了
#3
自增列可以空一列即可,会自动生成。
#4
150多个表,且字段方面多少有点改动。
#5
这个我也想知道 ! 一起等答案吧 帮你顶顶!
#6
字段有改动就没办法了 只能一张一张的
insert into b..tb(col1,col2) select col1,col2.. from a..ta
insert into b..tb(col1,col2) select col1,col2.. from a..ta
#7
如果是远程的话:
参考:
/*不同服务器数据库之间的数据操作*/
--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
#8
用导入导出向导做,在导出时,编辑列映射那一页上有一个"启用标识插入"选项,把它选中就行了.
#9
数据库导入导出功能可实现
#10
--表复制
IF exists (select * from sysobjects where id = object_id(N'[CopyTable]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE CopyTable
GO
Create Procedure CopyTable
(@DestDBName NVARCHAR(30) ,
@SourceDBName nVARCHAR(30),
@tblName VARCHAR(30))
AS
SET NOCOUNT ON
if (select object_id('Tempdb..#tblMSG')) IS NOT Null
DROP TABLE #tblMSG
EXEC DisableDMLTriger @tblName
if exists (select * from sysobjects where id = object_id(@tblName) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
--生成临时表 (存储列ID,列名,列类型)
SELECT
Column_ID=IDENTITY(INT,1,1),
ColumnName=C.name,
Type=T.name
INTO #tblMsg
FROM sys.columns C
INNER JOIN sys.objects O
ON C.[object_id]=O.[object_id]
AND O.type='U'
AND O.is_ms_shipped=0
INNER JOIN sys.types T
ON C.user_type_id=T.user_type_id
WHERE O.name=@tblName
ORDER BY O.name,C.column_id
--SELECT * FROM #tblmsg
--构造字段(排除属性为timestamp的列)
DECLARE @rowNumber int,@maxNum INT
DECLARE @strSQL_Insert NVARCHAR(4000),@strSql_Delete NVARCHAR(4000),@strSql NVARCHAR(4000)
DECLARE @colType VARCHAR(100),@colName VARCHAR(100)
SET @rowNumber=1
select @maxNum= MAX(column_id) FROM #tblMSG
WHILE @rownumber<=@maxNum
BEGIN
SELECT @colName=columnName,@coltype=[TYPE] FROM #tblMSG WHERE Column_ID=@rowNumber
IF @coltype<>'timestamp'
IF @rowNumber=1
set @strSql=@ColName
ELSE
set @strSql=@strSql+','+@ColName
SET @rowNumber=@rowNumber+1
END
--删除临时表
DROP TABLE #tblMSG
--构造删除语句
set @strSql_Delete ='Delete from ' +@DestDBName+'..'+ @tblName
--构造复制语句
if EXISTS(SELECT 1 FROM SYSOBJECTS
WHERE ID = OBJECT_ID(@tblName)
AND OBJECTPROPERTY(ID,N'TableHasIdentity') = 1)
BEGIN
set @strSQL_Insert = 'set identity_insert ' + @DestDBName + '.dbo.' + @tblName + ' ON '
set @strSQL_Insert = @strSQL_Insert + 'INSERT INTO '+ @DestDBName+'..'+ @tblName + ' (' + @strSql + ') ' + ' SELECT ' + @strSql +' FROM '+ @SourceDBName+'..'+@tblName
set @strSQL_Insert = @strSQL_Insert + ' set identity_insert ' + @DestDBName + '.dbo.' + @tblName + ' OFF '
END
ELSE
BEGIN
set @strSQL_Insert = 'INSERT INTO '+ @DestDBName+'..'+ @tblName + ' (' + @strSql + ') ' + ' SELECT ' + @strSql +' FROM '+ @SourceDBName+'..'+@tblName
END
--将目标数据库中的 @tblName 表数据删除
EXEC sp_executesql @strSql_Delete
--将源数据库中的 @tblName 表数据复制到目标数据库的 @tblName
EXEC sp_executesql @strSQL_Insert
exec EnableDMLTriger @tblName
END
ELSE
PRINT 'The Table ' + @tblName +' you want to copy is not exist.'
GO
注意:
lz可以根据自己的实际情况更改插入语句
比如你的a数据库中的aaa字段在b数据库中若变成bbb,这时你需要自己构造了
#11
上面
EXEC DisableDMLTriger @tblName
exec EnableDMLTriger @tblName
是禁用触发器的,lz可以注掉
EXEC DisableDMLTriger @tblName
exec EnableDMLTriger @tblName
是禁用触发器的,lz可以注掉
#12
导入数据功能吧
#13
不知道。
#14
SQL2005后的数据库复制功能。
会自动同步数据,及表结构变化.
会自动同步数据,及表结构变化.
#15
#16
看看我的需求给帮助答案吧。
数据库数据复制
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
数据库数据复制
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
#17
数据库数据复制
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
#18
即使是整个数据库里面的有且仅有的150个用户表需要迁移,系统也并不清楚两个数据库系统之间的表映射关系;即使表名都一直,大部分字段名及格式都一直,可能数据表之间也有关系,迁移也需要分先后顺序迁移;关键是,系统并不知道两个数据库字段差异的部分如何对应吧?设计人员才知道差异吧?
我也很关注这个帖子,看看大师们有什么招儿。
我也很关注这个帖子,看看大师们有什么招儿。
#1
备份,ftp bak文件到另外个服务器上还原
#2
仅仅是1个表的数据的或可以保存为csv文件或者excel,通过ftp传过去,然后在服务器上导入
根据导入导出向导自己选下就可以了
根据导入导出向导自己选下就可以了
#3
自增列可以空一列即可,会自动生成。
#4
150多个表,且字段方面多少有点改动。
#5
这个我也想知道 ! 一起等答案吧 帮你顶顶!
#6
字段有改动就没办法了 只能一张一张的
insert into b..tb(col1,col2) select col1,col2.. from a..ta
insert into b..tb(col1,col2) select col1,col2.. from a..ta
#7
如果是远程的话:
参考:
/*不同服务器数据库之间的数据操作*/
--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
#8
用导入导出向导做,在导出时,编辑列映射那一页上有一个"启用标识插入"选项,把它选中就行了.
#9
数据库导入导出功能可实现
#10
--表复制
IF exists (select * from sysobjects where id = object_id(N'[CopyTable]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE CopyTable
GO
Create Procedure CopyTable
(@DestDBName NVARCHAR(30) ,
@SourceDBName nVARCHAR(30),
@tblName VARCHAR(30))
AS
SET NOCOUNT ON
if (select object_id('Tempdb..#tblMSG')) IS NOT Null
DROP TABLE #tblMSG
EXEC DisableDMLTriger @tblName
if exists (select * from sysobjects where id = object_id(@tblName) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
--生成临时表 (存储列ID,列名,列类型)
SELECT
Column_ID=IDENTITY(INT,1,1),
ColumnName=C.name,
Type=T.name
INTO #tblMsg
FROM sys.columns C
INNER JOIN sys.objects O
ON C.[object_id]=O.[object_id]
AND O.type='U'
AND O.is_ms_shipped=0
INNER JOIN sys.types T
ON C.user_type_id=T.user_type_id
WHERE O.name=@tblName
ORDER BY O.name,C.column_id
--SELECT * FROM #tblmsg
--构造字段(排除属性为timestamp的列)
DECLARE @rowNumber int,@maxNum INT
DECLARE @strSQL_Insert NVARCHAR(4000),@strSql_Delete NVARCHAR(4000),@strSql NVARCHAR(4000)
DECLARE @colType VARCHAR(100),@colName VARCHAR(100)
SET @rowNumber=1
select @maxNum= MAX(column_id) FROM #tblMSG
WHILE @rownumber<=@maxNum
BEGIN
SELECT @colName=columnName,@coltype=[TYPE] FROM #tblMSG WHERE Column_ID=@rowNumber
IF @coltype<>'timestamp'
IF @rowNumber=1
set @strSql=@ColName
ELSE
set @strSql=@strSql+','+@ColName
SET @rowNumber=@rowNumber+1
END
--删除临时表
DROP TABLE #tblMSG
--构造删除语句
set @strSql_Delete ='Delete from ' +@DestDBName+'..'+ @tblName
--构造复制语句
if EXISTS(SELECT 1 FROM SYSOBJECTS
WHERE ID = OBJECT_ID(@tblName)
AND OBJECTPROPERTY(ID,N'TableHasIdentity') = 1)
BEGIN
set @strSQL_Insert = 'set identity_insert ' + @DestDBName + '.dbo.' + @tblName + ' ON '
set @strSQL_Insert = @strSQL_Insert + 'INSERT INTO '+ @DestDBName+'..'+ @tblName + ' (' + @strSql + ') ' + ' SELECT ' + @strSql +' FROM '+ @SourceDBName+'..'+@tblName
set @strSQL_Insert = @strSQL_Insert + ' set identity_insert ' + @DestDBName + '.dbo.' + @tblName + ' OFF '
END
ELSE
BEGIN
set @strSQL_Insert = 'INSERT INTO '+ @DestDBName+'..'+ @tblName + ' (' + @strSql + ') ' + ' SELECT ' + @strSql +' FROM '+ @SourceDBName+'..'+@tblName
END
--将目标数据库中的 @tblName 表数据删除
EXEC sp_executesql @strSql_Delete
--将源数据库中的 @tblName 表数据复制到目标数据库的 @tblName
EXEC sp_executesql @strSQL_Insert
exec EnableDMLTriger @tblName
END
ELSE
PRINT 'The Table ' + @tblName +' you want to copy is not exist.'
GO
注意:
lz可以根据自己的实际情况更改插入语句
比如你的a数据库中的aaa字段在b数据库中若变成bbb,这时你需要自己构造了
#11
上面
EXEC DisableDMLTriger @tblName
exec EnableDMLTriger @tblName
是禁用触发器的,lz可以注掉
EXEC DisableDMLTriger @tblName
exec EnableDMLTriger @tblName
是禁用触发器的,lz可以注掉
#12
导入数据功能吧
#13
不知道。
#14
SQL2005后的数据库复制功能。
会自动同步数据,及表结构变化.
会自动同步数据,及表结构变化.
#15
#16
看看我的需求给帮助答案吧。
数据库数据复制
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
数据库数据复制
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
#17
数据库数据复制
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
将一个数据库中的数据复制到另一个数据库
如果某列在目标数据库中为标识列,将不会被复制
要求适用范围:数据库结构发生了变化,想将旧数据库进行升级
可以根据新的数据库结构创建一个空库,然后
将旧数据库的所有数据复制到新库中
希望提供好的实例!!!感激不尽
#18
即使是整个数据库里面的有且仅有的150个用户表需要迁移,系统也并不清楚两个数据库系统之间的表映射关系;即使表名都一直,大部分字段名及格式都一直,可能数据表之间也有关系,迁移也需要分先后顺序迁移;关键是,系统并不知道两个数据库字段差异的部分如何对应吧?设计人员才知道差异吧?
我也很关注这个帖子,看看大师们有什么招儿。
我也很关注这个帖子,看看大师们有什么招儿。