我将图像存储在SQL Server 2008 R2数据库的varBinary(max)列中,名为:image1,其大小为150 * 150。我添加了另一个名为image2 varBinary(max)的列,我需要使用image1中相同的图像更新此列,但大小为70 * 70。是否可以使用sql查询执行此操作。
我试图找到查询,但没有得到任何线索如何做到这一点。如果有人以前做过这个以及怎么做,请告诉我?
答案 0 :(得分:2)
正如在一些评论中所说,SQL是一个数据存储系统,无法编辑您的图像。
我建议您使用首选语言(c#etc)对表执行一次性更新,并在将其更新回表之前调整每个图像并调整其大小。
然后从那时起确保插入表中的任何图像在插入之前都会调整大小。
答案 1 :(得分:2)
我同意每个人的观点,但如果您真的想要或不得不这样做,您可以在SQL Server上启用CLR集成,创建一个可以调整图像大小的程序集,然后从触发器调用它或者proc。它不是很难。这是一个描述流程的页面:http://msdn.microsoft.com/en-us/library/ms254498(VS.80).aspx
基本上在SQL Server上启用CLR:
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
创建一个c#程序集来调整图像大小:
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class ResizeImageProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void ResizeImage(int ImageID, int width, int height)
{
//TODO: ResizeImage Code
}
}
编译程序集
csc /target:library ResizeImageProc.cs
在SQL Server中加载程序集:
CREATE ASSEMBLY ResizeImageAssembly from 'c:\ResizeImageProc.dll' WITH PERMISSION_SET = SAFE
创建proc
CREATE PROCEDURE ResizeImage AS EXTERNAL NAME ResizeImageAssembly.ResizeImageProc.ResizeImage
之后你可以像普通的proc一样调用它。例如:
EXEC ResizeImage(1,800,600)