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 提取到临时表中的主要内容,如果未能解决你的问题,请参考以下文章