Sql server SQL Server BCP导出损坏的文件?

Sql server SQL Server BCP导出损坏的文件?,sql-server,file,export,bcp,corrupt,Sql Server,File,Export,Bcp,Corrupt,我对SQL Server 2012中的BCP功能有一个小问题。 事情是这样的: 使用以下命令加载.jpg图像(大小为167KB): 插入[tabela_testowa](数据) 从OPENROWSET(BULK N'C:\foty\ch6_MagicShop.jpg',SINGLE_BLOB)中选择*a 然后我尝试使用以下方法将其导出回磁盘: BCP“从tabela_testowa中选择数据,其中ID=1”queryyout“C:\test\file.jpg”-T-n-d test 文件保存在磁

我对SQL Server 2012中的BCP功能有一个小问题。 事情是这样的: 使用以下命令加载.jpg图像(大小为167KB):

插入[tabela_testowa](数据) 从OPENROWSET(BULK N'C:\foty\ch6_MagicShop.jpg',SINGLE_BLOB)中选择*a

然后我尝试使用以下方法将其导出回磁盘:

BCP“从tabela_testowa中选择数据,其中ID=1”queryyout“C:\test\file.jpg”-T-n-d test

文件保存在磁盘上没有问题,大小也是167KB,但是。。它不能像原版一样打开。 我不知道BCP导出中的某些参数是否出错?或者它在导入阶段被破坏了?
有人有类似的问题吗?

BCP正在向他的文件中添加信息。只有很少的数据,但您不只是导出一个jpg文件

你说167KB,但要注意实际字节,而不是舍入的维度。会有不同的

您无法通过BCP导出图像。

好的,所以我解决了这个问题。
必须使用-f和文件路径添加格式化文件。它可以通过运行bcp而不使用任何格式创建,并命令它将格式文件保存到磁盘。然后我们可以使用这种格式的文件,这样就不再需要它来回答这些问题,而且文件本身没有额外的数据,可以毫无问题地打开

感谢上帝,感谢@user_0 answer和@user3494351神秘的回答和评论,在我用头撞了几个小时后,我终于明白了这一点

问题是BCP喜欢在默认情况下向文件添加额外的8个字节。如果只使用native-n标志,则会损坏文件并使其无法打开

但是,BCP允许您指定一个格式文件作为输出,允许您告诉它不要添加额外的8字节。因此,我在SQL Server中创建了一个表(用于游标),该表只有一行一列包含二进制数据。运行第一个命令时,表必须存在

在命令行中,首先需要执行以下操作:

bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
这将在您所在的目录中创建formatfile.fmt。我是在E:\驱动器上做的。下面是它的样子:

10.0
1
1       SQLBINARY           8       0       ""   1     MyColumn             ""
右边的8是bcp表示要添加到文件中的字节数的变量。是那个混蛋破坏了你的档案。将该吸盘更改为0:

10.0
1
1       SQLBINARY           0       0       ""   1     MyColumn             ""
现在只需运行BCP脚本,删除-n标志并包含-f标志:

bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt

好的,事情是这样的。如果我在没有指定格式的情况下从命令行运行bcp(所以没有-n),我会被问到4个问题:文件存储类型、前缀长度、字段数据长度,以及最后是否要将该信息保存在文件中。如果我选择前缀长度0和字段长度0,最后我回答否,它保存得很好,可以正常打开。然而,如果没有提示我回答这些问题,我怎么做呢/@用户_0这不是真的,您可以导出图像,只需设置格式文件即可。请参阅下面的答案。如果您遇到有关
.fmt
文件的I/O问题,请确保在文件末尾添加了n个换行符!上面的例子没有。除此之外,这个解决方案是有效的!如何把那个笨蛋变成一个傻瓜0@avn在文件末尾添加n是什么意思?具体在哪里?@Conor下一步,我删除了所有导出的图像,创建了文件,将8更改为0,保存了文件,并再次运行bcp脚本,但我面临的问题是,我无法预览任何图像..即使我在包含图像的文件夹中创建了formatfile.fmt..@AnthonyHorne我几年前写了这个答案,但我可以确认我是在SQL Server 2012中创建此格式文件的。也许在以后的版本中自动生成它的功能被删除了。