SQL Server批量数据导出导入BCP&Bulk使用

数据导出导入,首先考虑使用什么技术实现导出与导入
利用BCP结合Bulk技术实现数据的导出与导入

  • 1.bcp数据导出(这里是命令行方式),导出的数据需是格式化的,有两种方式可选
    • a.对传输的数据格式要求宽松,无需使用约束格式的文件,使用BCP技术直接导出指定分隔符的文本文件,如csv

     导出数据示例

bcp "SELECT * from updext.dbo.ext_Users where 1>=1" queryout "c:\a.csv" -c -t"0x0b" -r"\n" -S".\SQLSERVER2012" -U"user" -P"password"

    • b.数据格式要求较高,需要专门导出格式文件,用于导入数据时使用

先导出数据格式文件
bcp "updext.dbo.ext_users" format null -c -t"0x0a" -x -f "c:\data.fmt" -r"\n" -S".\SQLSERVER2012" -U"username" -P"password"

再导出数据文件,导入导出往往用于系统间数据同步,因此考虑使用SQL查询queryout

  • 若需要按数据格式文件导出数据

bcp "SELECT * FROM updext.dbo.ext_users WHERE changetime<GETDATE()" queryout "c:\DATA1.csv" -f "c:/data.fmt" -t"0x0a" -r"\n" -S".\SQLSERVER2012" -U"username" -P"password"

  • 若自定义数据分隔符

bcp "SELECT * FROM updext.dbo.ext_users WHERE changetime<GETDATE()" queryout "c:\DATA1.csv" -c -t"0x0a" -r"\n" -S".\SQLSERVER2012" -U"username" -P"password"

 

  • 2.导入数据
    • 如果是整体数据导入

BULK INSERT updext.dbo.ax--(UserId,UserNo,UserName,PassWord,Email,Code,IsValid,ChangeTime)
FROM 'c:\DATA1.csv'
WITH(
--KEEPIDENTITY,
--FIELDTERMINATOR ='0x0a',--避免使用逗号分隔,内容中出现逗号的概率太大
--ROWTERMINATOR ='\n',
--FIRSTROW = 1
FORMATFILE = 'c:\data.fmt'
)

    • 如果只需要导入部分数据

INSERT INTO updext.dbo.ax(UserId,UserNo,UserName,PassWord,Email,Code,IsValid,ChangeTime)
SELECT UserId,UserNo,UserName,PassWord,Email,Code,IsValid,ChangeTime
          FROM OPENROWSET(BULK N'c:\DATA1.csv', FORMATFILE=N'c:\data.fmt') a
                 WHERE ChangeTime<'2017-01-06 12:02:31.067'

  

posted @   jeffery1010  Views(881)  Comments(0Edit  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示