通过 t sql 将 SQL Server 数据库中的 varbinary 图像导出/提取到平面文件的最佳方法是什么,有什么比 sp_OA 方法更好的方法吗?

Eri*_*gum 2 sql-server etl export ole-automation

我的任务是通过 t-sql 将 SQL Server 中保存的图像(作为 varbinary)提取到平面文件中。我已经有十多年没有做过 ETL 工作了,除了使用 sp_OACreate、sp_OAMethod 等之外,我不记得通过 t-sql 执行此操作的任何其他方法。

是否有一些新方法可以解决这个问题?更“可靠”并且不需要打开 OLE 自动化程序并做所有这些疯狂的事情的东西?

这将是一个持续的过程。不是一次性运行。

Eri*_*ost 9

如果您确实必须从 T-SQL 执行此操作,并且您的 SQL Server 实例版本是 2012 或更高版本,则可以使用FileTable。它依赖于 FileStream 功能,因此您必须首先启用此功能。

为了简单起见,FileTable 的工作方式与常规表基本相似,但文件内容存储在 FILESTREAM 文件组中,并且可以使用 UNC 路径直接访问文件。事实上,可以通过UNC路径读取、创建、修改或删除文件。UNC 路径的权限与文件表相同。例如:如果 DOMAIN\bob 具有 SELECT 权限,他将具有 UNC 路径的读取权限。

创建文件表后,您可以使用如下所示的 INSERT 加载它:

INSERT INTO dbo.myFileTable(name, file_stream)
SELECT file_name,file_data
FROM dbo.OldTableWithFileContent;
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您就可以获取\\<servername>\<MSSQLSERVER or instance name>. 确切的路径将取决于您的 FileStream 配置,但永远不要尝试访问 FileStream 配置中定义的本地路径,只能通过 SQL Server 管理的 UNC 路径。

最后,如果只是一次性导出,您可以在将文件复制到最终目的地后删除 FileTable。