SQLServer 2005 相同结构的数据库导数据 要求记录完全一致
环境情况介绍:
有两个完全相同结构的数据库,A数据库有数据,B数据库没有数据。
目的:
要把A数据库的所有数据导入到B数据库,且标识ID也要相同
以下是我的步骤:
1.创建一个获取表导数据的自定义标量值函数
脚本如下:
/****** 对象: UserDefinedFunction [dbo].[Fn_GetDataScript] 脚本日期: 09/28/2011 10:11:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <zx>
-- Create date: <2011-09-27>
-- Description: <获取导一个表数据的脚本>
-- 启用标识插入的方式
-- =============================================
CREATE FUNCTION [dbo].[Fn_GetDataScript]
(
@sTableName sysname
)
RETURNS varchar(max)
AS
BEGIN
DECLARE @sColumns varchar(max)
DECLARE @sSql VARCHAR(max)
SELECT @sColumns = ISNULL(@sColumns,'') + '['+ NAME + '],' FROM sys.COLUMNS WHERE OBJECT_ID(@sTableName) = OBJECT_ID
IF @sColumns IS NOT NULL
BEGIN
SET @sColumns = SUBSTRING(@sColumns,1,len(@sColumns)-1)
END
SET @sColumns = ISNULL(@sColumns,'')
IF EXISTS(SELECT 1 FROM sys.columns WHERE is_identity = 1 AND object_id = object_id(@sTableName))
BEGIN
SET @sSql = ISNULL(@sSql,'') + 'SET IDENTITY_INSERT dbo.'+@sTableName+' ON <br>Insert into dbo.'+@sTableName +'('+@sColumns+')<br>select * from A.dbo.'+ @sTableName +'<br>SET IDENTITY_INSERT dbo.'+@sTableName+' OFF<br>'
END
ELSE
BEGIN
SET @sSql = ISNULL(@sSql,'') + '<br>Insert into dbo.'+@sTableName +'('+@sColumns+')<br>select * from A.dbo.'+ @sTableName +'<br>'
END
RETURN @sSql
END
2.直接利用SQLserver2005中的系统目录sys.tables进行脚本生成,脚本如下:
USE A
SELECT dbo.Fn_GetDataScript(name)
FROM sys.tables
3.由于函数dbo.Fn_GetDataScript返回的结果中有HTML标记,直接把第2步查询出来的结果复制到记事本,然后另存为script.html文件,用IE打开就可以直接获取导整个数据的脚本,把IE中显示的脚本复制到SQL Server management Studio 的查询中执行,当然要把当前数据库定位在B数据库
Use B
复制的脚本
注意:由于本人的数据库是在同一服务器,所以 dbo.Fn_GetDateScript函数中使用的是A.表名,如果你是链接服务器就用相应的代码替换掉。
可能大家有使用SQLServer2005 自带的导数据功能,我也用过,不过有时候导数据虽然选中启用标识插入
但最后还是不理想,所以制作以上脚本来处理。
OK!介绍完毕!

浙公网安备 33010602011771号