sql-server - 在 SQL Server 中查看存储在 Varbinary(MAX) 中的文件

标签 sql-server database t-sql ms-access file-io

假设我将一个文件插入到 varbinary(max) 字段中,如下所示:

CREATE TABLE myTable
(
      FileName nvarchar(60),
      FileType nvarchar(60), 
      Document varbinary(max)
)
GO

INSERT INTO myTable(FileName, FileType, field_varbinary)
    SELECT 
        'Text1.txt' AS FileName, 
        '.txt' AS FileType,
        * 
    FROM 
        OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
GO

当然,我的文件现在看起来像这样:

0xFFD8FFE000104A46494600010101004800....

有没有一种简单而优雅的方法来检索此文件?

我的偏好是立即在临时文件夹中打开它,而不是保存然后查看和删除。在 MS Access 中,这就像使用附件字段并双击上传/下载一样简单。

最佳答案

由于 SSMS 中没有用于此任务的内置功能,因此我通常编写一个简单的 LINQPad 脚本来提取 varbinary 列并将其写入文件系统。

类似这样的事情:

var results = from p in myTable 
                       where p.ID == ... //your condition here
                       select p;

foreach (var item in results)
{ 
    File.WriteAllBytes("C:\\" + item.FileName + item.FileType , item.Document.ToArray());
}

关于sql-server - 在 SQL Server 中查看存储在 Varbinary(MAX) 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200249/

相关文章:

sql - IF EXISTS 在 INSERT、UPDATE、DELETE 之前进行优化

java - DAO 方法检索单个条目

json - 从 T-SQL 查询将键值对输出为 JSON

sql - T-SQL SELECT TOP 值和增量

sql-server - 可以选择向结果表中添加新字段吗?

sql-server - SQL 连接池和审核登录/注销

c# - DBReader 有行但 Read() 返回 false

sql-server - 子查询返回了 1 个以上的值。这不允许在 AFTER INSERT,UPDATE 触发器中出现错误

mysql - 连接亚马逊mysql数据库

java - 使用 Java 的 SQL 提供程序