我使用 Microsoft Sql server 2012 作为 DBMS,我的数据库包含有关足球运动员。每个球员都有一张照片,我需要将球员照片导出到我的计算机上,我想可以通过 TSQL 来完成,这样我就可以避免编程或编辑我的应用程序来仅导出照片。
这是我到目前为止所做的:
MYSQL 代码:
EXEC sp_configure '显示高级选项', 1 GO 重新配置 GO EXEC
sp_configure 'xp_cmdshell', 1 重新配置 GO
EXEC master..xp_cmdshell 'mkdir C:\ImagesFromSql'
EXEC master..xp_cmdshell 'BCP“从以下位置选择照片
[FootballTeam].[dbo].[Players]" 查询输出
“C:\ImagesFromSql\TestImage.jpg”-T -N'
正如您所看到的,我的文件夹 ImagesFromSql 是在“C:\”上创建的,其中还存储了一张照片,但有趣的是该照片有 361MB 大,所以这可能是数据库中包含的所有照片的大小?
我想知道如何从数据库中导出所有图像而不是在这种情况下导出一个图像,并且是否可以设置它们的名称,例如让我们将图像名称设置为 PlayerID,例如 1.jpg、2.jpg、3.jpg。 ...650.jpg...
after @H.Fadlallah suggested some answers this is what I get:
无法预览图像..:)
在 @H.Fadlallah 帮助之后,我再次执行了这个查询:
将 @ID 声明为 int 将 @SQL 声明为 varchar(4000)
声明 csr 光标用于选择 PlayerID FROM
[足球队].[dbo].[球员]
OPEN csr
从 csr 获取下一个 INTO @ID
当 @@FETCH_STATUS = 0 开始时
SET @SQL = 'BCP "从 [FootballTeam].[dbo].[Players] WHERE 选择照片
PlayerID = "' + CAST(@ID as varchar(10)) + ' 查询输出
"C:\ImagesFromSql\' + CAST(@ID as varchar(10)) + '.jpg" -T -f
C:\ImagesFromSql\formatfile.fmt'
EXEC master..xp_cmdshell @SQL
从 csr 获取下一个 INTO @ID
END
关闭 csr 解除分配 csr
但现在我得到了空图像,可能我错过了一些东西..(顺便说一句,文件 formatfile.fmt 是在与图像相同的文件夹中创建的,我将照片属性的二进制值从 8 更改为 0,正如 H.Fadallah 在另一篇文章中建议的那样)。
尝试以下查询:
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 ID FROM [FootballTeam].[dbo].[Players]
OPEN csr
FETCH NEXT FROM csr INTO @ID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'BCP "SELECT Photo FROM [FootballTeam].[dbo].[Players] WHERE ID = "' + 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)