Sql server SQL Server';s bcp实用程序损坏varbinary(max)数据
表结构:Sql server SQL Server';s bcp实用程序损坏varbinary(max)数据,sql-server,bcp,Sql Server,Bcp,表结构: CREATE TABLE [dbo].[Binaries] ( [Id] [bigint] IDENTITY(1,1) NOT NULL, [Data] [varbinary](max) NULL, [SHA256] [varbinary](32) NULL, [CreatedDate] [datetime2](7) NOT NULL, [DeletedDate] [datetime2](7) NULL, [IsDeleted] [bit
CREATE TABLE [dbo].[Binaries]
(
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Data] [varbinary](max) NULL,
[SHA256] [varbinary](32) NULL,
[CreatedDate] [datetime2](7) NOT NULL,
[DeletedDate] [datetime2](7) NULL,
[IsDeleted] [bit] NOT NULL
)
命令:
bcp MyDb.dbo.Binaries format nul -f E:\format.fmt -T -n
bcp MyDb.dbo.Binaries OUT E:\Binaries.bcp -f E:\format.fmt -T
bcp MyDb.dbo.Binaries IN E:\Binaries.bcp -f E:\format.fmt -T
格式文件:
14.0
6
1 SQLBIGINT 0 8 "" 1 Id ""
2 SQLBINARY 8 0 "" 2 Data ""
3 SQLBINARY 2 32 "" 3 SHA256 ""
4 SQLDATETIME2 0 8 "" 4 CreatedDate ""
5 SQLDATETIME2 1 8 "" 5 DeletedDate ""
6 SQLBIT 1 1 "" 6 IsDeleted ""
数据
列包含导入文件损坏后的文档,即pdf文件(差异约为5-10%,文件大小较小)
原始数据库已从.bak文件还原
服务器版本:
Microsoft SQL Server 2016 (SP1-GDR) (KB4019089) - 13.0.4206.0 (X64) Enterprise Edition (64-bit) on Windows 10 Pro N 6.3 <X64> (Build 17134: ) (Hypervisor)
Windows 10 Pro N 6.3上的Microsoft SQL Server 2016(SP1-GDR)(KB4019089)-13.0.4206.0(X64)企业版(64位)(版本17134:)(虚拟机监控程序)
您可以发布从第一行获得的格式文件吗?您的SQL版本是什么?添加了格式文件和服务器版本。我刚刚在2012年和2016年运行了您的测试,PDF导出很好,只是在末尾添加了一个字符串。这些字符当然来自为表创建的.fmt
文件。所以在我的例子中,bcp
根据请求吐出表记录。我无法确认您的文件比原件小的结果。编辑.fmt
以排除除BLOB之外的字段,它应该一对一导出。当然,除非我误解了你的问题,你的意思是文件比水滴小。那么原因就是我之前写的。我曾尝试使用C#/ADO.NET使用磁盘上的文件导出和导入数据(原始字节数组),但遇到了完全相同的问题,文件以相同的方式损坏,字节到字节。我怀疑数据在插入/选择操作(编码?)过程中被修改了,但我不知道为什么。最后我发现了问题,旧系统是使用DevXPress框架构建的,结果证明它在内部使用压缩(有时是智能的!),所以数据实际上被压缩了。。。无论如何,谢谢你的帮助。