0

我有一个批处理文件,用于从数据库中复制数据。该数据库有超过 7500 万条记录。

所以我做了8个输出文件..每个1000万检索范围。

Tha批处理文件如下:

echo off

REM -t"^^" -r"~`~" 

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b1.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F1 -L10000000 -t"^^" -r"~`~"

REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b2.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F10000001 -L20000000 -t"^^" -r"~`~"

rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b3.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F20000001 -L30000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b4.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F30000001 -L40000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b5.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F40000001 -L50000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b6.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F50000001 -L60000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b7.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F60000001 -L70000000 -t"^^" -r"~`~"

rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b8.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F70000001 -L80000000 -t"^^" -r"~`~"

暂停

我遵循的方法是:我正在使用 rem 注释最后 7 条语句,并且只运行第一行..然后注释除第二行之外的所有行并运行批处理文件..依此类推.. 直到最后线..

对于第一行,我花了 45 分钟来复制记录。对于第二行,我花了 1 小时 20 分钟.. 对于第三行.. 2 小时 5 分钟.. 依此类推......时间每次都在增加。

有人可以提出任何优化此类批处理文件的方法吗?

最好的问候阿苏托什

4

2 回答 2

1

关于你的问题,我想说明两点:

1- 您可以按照以下批处理文件中显示的方式自动执行批处理文件:

echo off
setlocal EnableDelayedExpansion

REM -t"^^" -r"~`~" 

set start=1
for /L %%i in (1,1,7) do (
   "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b%%i.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F!start! -L%%i0000000 -t"^^" -r"~`~"
   set /A start+=10000000
)
pause

此批处理文件一次执行 1..8 个步骤...如果此解决方案不适合您,可以将批处理文件修改为仅运行参数中指示的一个步骤(如果需要,请询问) .

2-执行时间的问题与批处理文件无关(我不知道sql),所以你应该在这方面听从其他人的建议。

我希望它有帮助...

安东尼奥

于 2012-12-01T08:11:39.057 回答
0

不要使用 -F 和 -L 参数,因为在您的情况下,bcp 每次扫描表到行“F”并且需要一些时间。只需导出整个表。或者考虑使用分区和“滑动窗口分区模式”。

于 2012-11-30T13:00:39.503 回答