使用sql查询将图像大小从150 * 150更改为70 * 70?

时间:2012-05-17 06:50:25

标签: image sql-server-2008

我将图像存储在SQL Server 2008 R2数据库的varBinary(max)列中,名为:image1,其大小为150 * 150。我添加了另一个名为image2 varBinary(max)的列,我需要使用image1中相同的图像更新此列,但大小为70 * 70。是否可以使用sql查询执行此操作。

我试图找到查询,但没有得到任何线索如何做到这一点。如果有人以前做过这个以及怎么做,请告诉我?

2 个答案:

答案 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)