当我将数据库部署到本地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作为我们的数据库托管解决方案进行开发,我很快就开始后悔自己的决定。该平台缺乏对扩展属性的支持,现在这意味着简单的数据库部署已成为一件苦差事!
答案 0 :(得分:0)
我遇到了同样的问题,最后使用LinqPad找到了一个很好的解决方案。
C# Program
编写脚本,如下所示:
void Main()
{
var entity = MyDataTable.First(x => x.Id == 1);
entity.Image = File.ReadAllBytes("c:\\foo\\bar.png");
SubmitChanges();
}
现在您可以点击F5
,数据库将会更新。
要将其用作部署后脚本:
*.linq
文件linqpad
,或者只是复制可执行文件lprun
运行脚本:lprun myscript.linq