2017-07-19 77 views
0

比方说,我插入一个文件到一个varbinary(max)场像这样:查看在SQL Server存储在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中,这与使用附件字段并双击上传/下载一样简单。

+1

SQL Server不是客户端应用程序。您需要一个可以打开文件的应用程序。只是在SQL Server中查询它是行不通的。 –

+0

是的,我知道...你能提供一个解决方案 – Yoav24

+0

我怎么能这样做?我不知道你使用的是什么应用程序。 –

回答

1

我用C#和ASP.NET工作,我结束了使用通用处理器这样做,以后链接到其他地方在我的网站项目:

public class ImageProvider : IHttpHandler { 
    public string connString = "..."; 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "image/jpeg"; 

     string sqlSelectQuery = "select img from table" 
     SqlConnection conn = new SqlConnection(connString); 
     conn.Open(); 
     SqlCommand cmd = new SqlCommand(sqlSelectQuery, conn); 

     byte[] img = (byte[])cmd.ExecuteScalar(); 
     context.Response.BinaryWrite(img); 

    } 
1

由于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()); 
} 
+0

谢谢。我会试试这个,让你知道 – Yoav24

相关问题