TSQL 将数据库 BLOB 提取到临时表中

Posted

技术标签:

【中文标题】TSQL 将数据库 BLOB 提取到临时表中【英文标题】:TSQL Extract Database BLOB into temporary table 【发布时间】:2019-04-06 21:55:35 【问题描述】:

我们使用封闭的在线记录系统,允许将 CSV 文件作为图像 BLOB 上传到数据库中。系统使用它们来完成各种工作。

我正在尝试找到一种方法来上传 CSV,然后使用 OpenRowset 或类似工具从数据表中访问我自己的报告的相应 BLOB,然后将 CSV 数据导出到临时表中。

我不知道从哪里开始。我试过玩 OpenRowset 但失败了。

如有任何提示,我们将不胜感激。

【问题讨论】:

“图像 BLOB”是指已弃用的 IMAGE 类型的列吗?你对此无能为力。如果 CSV 以 Windows-1252 或 Unicode 编码,请尝试将其转换为 VARCHAR(MAX)NVARCHAR(MAX)(分别)。即使这样也只会为您提供文本形式的 CSV 文件。 SQL Server 直到 2017 年才能导入 CSV,即使这样也无法从任何非文件中读取它。您可以使用 OLE 自动化将 blob 保存为文件,但我强烈建议您使用客户端代码解决此问题 (bcp would probably do)。 忘记 T-SQL 来完成这项工作。更好的方法是使用外部程序将 blob 从数据库中提取到外部文件中,解析 csv 文件并插入到表中。 不幸的是,外部程序是不可能的。我必须在应用程序的框架内工作。 是的,IMAGE 类型的列。转换为 VARCHAR(MAX) 可能是一个选项。获得文本后,我可以将其拆分。 【参考方案1】:

按照 cmets,似乎最简单的方法是先转换为 varbinary,然后将其包装在转换为 varchar(max) 中。

这允许我从 BLOB 中获取文本。

谢谢各位!

Select cast(cast(my_column as varbinary(max)) as varchar(max)) from mytable

【讨论】:

以上是关于TSQL 将数据库 BLOB 提取到临时表中的主要内容,如果未能解决你的问题,请参考以下文章

TSQL - 排除与临时表匹配的行

从 DB2 数据库的两个表中提取数据并加载到临时表中

TSQL--临时表和表变量

mysql创建临时表,将查询结果插入已有表中

需要将数据全部插入到临时表中

将数据从表插入临时表,然后从临时表中选择特定行