BCR从MSSQL服务器导出图像

时间:2016-10-23 14:30:25

标签: database image tsql export bsp

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

在命令行上,我创建了文件formatfile-n.fmt并将其定位到E:磁盘,因为我搜索了很多网页,我看到需要编辑该文件以设置它的SQLBINARY值为8在this post读取(我们正在谈论图像,这就是我们需要编辑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

当图像具有原始大小时,这是我的完整代码。但他们根本无法打开!就像他们已经腐败一样,这就是我回到this post的原因,但我已经做到了!将值更改为零!

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

我真的被困在这里,这很烦人,有没有人有任何建议?

2 个答案:

答案 0 :(得分:0)

我现在不是原因,但BCP在导出图像时效果不佳。 从SQL导出图像的最佳方法是创建DotNet应用程序,将图像加载到DataSet中并将它们导出到文件。有很多文章介绍了如何做到这一点。Example 1 Example 2

但是对于TSQL:

尝试使用此Topic

中编写的解决方案

有关其他信息,请阅读此Topic并阅读正确答案底部的注释。我们已经做了很多解决方法。

答案 1 :(得分: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