0

我正在尝试使用 bcr 从 SQL Server 导出图像,我也想知道该怎么做,所以我决定自己尝试一下。所以我的问题是如何成功地从 mssql 导出图像,到目前为止我所做的描述如下:

在命令行上,我创建了文件formatfile-n.fmt并将其定位到E:磁盘,因为我在网上搜索了很多,我发现它需要编辑该文件以将其 SQLBINARY 值从 8 设置为 0。在这篇文章中阅读(我们正在谈论图像,这就是我们需要编辑 SQLBINARY 的原因)。

我执行了命令(如下)并将图像导出到我想要的位置,所有图像都在那里,但它们没有大小!

当图像没有大小时,这是我的完整代码:

EXEC sp_configure 'show advanced options', 1 

GO  RECONFIGURE  GO  EXEC sp_configure 'xp_cmdshell', 1  GO  RECONFIGURE  GO

EXEC master..xp_cmdshell 'mkdir C:\ImagesFromSql'

DECLARE @ID as int DECLARE @SQL as varchar(4000)

DECLARE  csr CURSOR FOR SELECT BrojIskaznice FROM [Savez].[dbo].[Igraci]

OPEN csr

FETCH NEXT FROM csr INTO @ID

WHILE @@FETCH_STATUS = 0  BEGIN


SET @SQL = 'BCP "SELECT Fotografija FROM [Savez].[dbo].[Igraci] WHERE BrojIskaznice = "' + CAST(@ID as varchar(10)) + ' queryout "C:\ImagesFromSql\' + CAST(@ID as varchar(10)) + '.jpg" -T -fC "E:\formatfile-n.fmt'

EXEC master..xp_cmdshell  @SQL

FETCH NEXT FROM csr INTO @ID

END


CLOSE csr DEALLOCATE csr

当图像具有原始大小时,这是我的完整代码。但它们根本无法打开!就像他们被破坏了,这就是我回到这篇文章的原因,但我已经这样做了!将值更改为零!

EXEC sp_configure 'show advanced options', 1 

GO  RECONFIGURE  GO  EXEC sp_configure 'xp_cmdshell', 1  GO  RECONFIGURE  GO

EXEC master..xp_cmdshell 'mkdir C:\ImagesFromSql'

DECLARE @ID as int DECLARE @SQL as varchar(4000)

DECLARE  csr CURSOR FOR SELECT BrojIskaznice FROM [Savez].[dbo].[Igraci]

OPEN csr

FETCH NEXT FROM csr INTO @ID

WHILE @@FETCH_STATUS = 0  BEGIN


SET @SQL = 'BCP "SELECT Fotografija FROM [Savez].[dbo].[Igraci] WHERE BrojIskaznice = "' + CAST(@ID as varchar(10)) + ' queryout "C:\ImagesFromSql\' + CAST(@ID as varchar(10)) + '.jpg" -T -N'

EXEC master..xp_cmdshell  @SQL

FETCH NEXT FROM csr INTO @ID

END


CLOSE csr DEALLOCATE csr

我真的被困在这里,这太烦人了,有人有什么建议吗?

4

2 回答 2

0

我现在不知道原因,但 BCP 无法正常导出图像。从 SQL 导出图像的最佳方法是创建一个 DotNet 应用程序,将图像加载到数据集中并将它们导出到文件。有很多文章展示了如何做到这一点。示例 1 示例 2

但是对于 TSQL :

尝试本主题中编写的解决方案

如需更多信息,请阅读本主题并阅读正确答案底部的评论。我们做了很多变通方法。

于 2016-10-23T19:01:14.467 回答
0

在具有原始大小的图像的第二个代码块中,您似乎没有指定格式文件

注意:我没有足够的声誉发表评论。

如果您不尝试仅导出图像列,则实际上不需要冗长的查询甚至格式文件。只需使用 bcp 将整个数据库表导出到路径中指定的数据文件。

Declare @sql varchar(500)
SET @sql = 'bcp Your_db.Your_table out Your_File_Path(eg: C:\ImagesNames.Dat) -T -S ' + @@SERVERNAME
EXEC @sql

请查看以下相关链接:
https ://msdn.microsoft.com/en-us/library/ms191232(v=sql.110).aspx

于 2016-11-24T13:15:39.437 回答