Sql Server 大批量数据迁移
一、生成BCP脚本
sql
SELECT
'bcp "SELECT * FROM [ZOL_YS001ERPV2].[dbo].[' + t.name + '] ' +
'WHERE CompanyCode IN (''00000015'',''00000603'','''') OR CompanyCode IS NULL " ' +
'queryout "{文件夹路径}\' + t.name + '.dat" ' +
'-S {数据库IP} -U {账户} -P "{密码}" -n -b 50000'
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.name = 'CompanyCode:包含什么字段的表'
1、查出数据脚本 另存为 .bat
Export_Data.bat
文件编码更改:ANSI
2、导出文件会在 上面路径下
二、生成导入脚本
c
@echo off
setlocal enabledelayedexpansion
echo 开始导入数据...
echo 导入时间: %date% %time%
set "server={数据库IP}"
set "database={表}"
set "user={账户}"
set "password={密码}"
for %%f in ({文件夹路径}\*.dat) do (
set "filename=%%~nf"
echo 正在导入表: !filename!
bcp "!database!.dbo.!filename!" IN "%%f" -S %server% -U %user% -P "%password%" -n -b 50000 -E -h "TABLOCK"
if !errorlevel! equ 0 (
echo 成功导入: !filename!
) else (
echo 错误: !filename! 导入失败
)
)
echo 导入完成!
echo 结束时间: %date% %time%
pause
1、上方另存为 .bat
Import_All_Data.bat
文件编码更改:ANSI
数据库设置简单日志模式
sql
--1、简单日志
ALTER DATABASE [H_ZOL_YS001ERPV2] SET RECOVERY SIMPLE;
--2、完整日志
ALTER DATABASE [H_ZOL_YS001ERPV2] SET RECOVERY FULL;
比较两个库差异表
sql
SELECT
b.TABLE_NAME
FROM
ZOL_YS001RPTV2.INFORMATION_SCHEMA.TABLES b
LEFT JOIN
H_ZOL_YS001RPTV2.INFORMATION_SCHEMA.TABLES a
ON a.TABLE_NAME = b.TABLE_NAME
WHERE
a.TABLE_NAME IS NULL
AND b.TABLE_TYPE = 'BASE TABLE'
ORDER BY
b.TABLE_NAME;
去除表自增
sql
SET IDENTITY_INSERT 表 ON
可插入语句
SET IDENTITY_INSERT 表 OFF --294872
数据库权限
sql
1、设置数据库可信度
执行以下T-SQL命令将数据库标记为可信:
sql
ALTER DATABASE [数据库名] SET TRUSTWORTHY ON
2、更改数据库所有者
有时需要将数据库所有者改为sa账户:
sql
USE [数据库名]
GO
EXEC sp_changedbowner 'sa'