如何将图像插入SQL Azure图像列

时间:2015-03-04 17:11:10

标签: sql-server azure azure-sql-database

当我将数据库部署到本地SQL Server 2012计算机时,我运行包含以下内容的部署后脚本:

SET IDENTITY_INSERT dbo.[EntityType] ON
GO
INSERT INTO dbo.[EntityType] (ID, Name, Icon)
SELECT 1, 'Client', * FROM OPENROWSET(BULK N'c:\icons\client.png', SINGLE_BLOB) AS tempImg
SET IDENTITY_INSERT dbo.[EntityType] OFF
GO

这会向EntityType表添加一条记录,包括一个图像,该图像将添加到数据类型为Image Icon 列中。当我将相同的数据库部署到Microsoft Azure时,部署后脚本失败。在手动运行脚本的这一部分时,我收到错误:

  

关键字或声明选项' single_blob'此版本的SQL Server

不支持

好的,Azure SQL不支持SINGLE_BLOB,那么如何从Azure的SQL脚本中实现相同的功能呢?我用谷歌搜索过,有一个奇怪的例子暗示如何在应用程序中编写C#代码,允许用户将图像上传到Azure SQL后端,但我不想编写整个应用程序有了前端界面,我只想在我的数据库中的表中添加几条记录!

我不得不说,主张使用Azure SQL作为我们的数据库托管解决方案进行开发,我很快就开始后悔自己的决定。该平台缺乏对扩展属性的支持,现在这意味着简单的数据库部署已成为一件苦差事!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,最后使用LinqPad找到了一个很好的解决方案。

  1. 创建新的Azure连接
  2. 选择C# Program
  3. 编写脚本,如下所示:

    void Main()
    {
        var entity = MyDataTable.First(x => x.Id == 1);
        entity.Image = File.ReadAllBytes("c:\\foo\\bar.png");
        SubmitChanges();
    }
    
  4. 现在您可以点击F5,数据库将会更新。 要将其用作部署后脚本:

    1. 将脚本另存为*.linq文件
    2. 在应该执行脚本的机器上安装linqpad,或者只是复制可执行文件
    3. 使用lprun运行脚本:lprun myscript.linq