2

サイズが150 * 150のimage1という名前のvarBinary(max)列のSQLサーバー2008 R2データベースに画像を保存しています。image2 varBinary(max) という名前の別の列を追加しました。この列を image1 の同じ画像で更新する必要がありますが、サイズは 70*70 です。SQLクエリを使用してこれを行うことは可能ですか.

クエリを見つけようとしましたが、これを行う方法の手がかりが得られませんでした。誰かが以前にこれを行ったことがあるかどうか、またその方法を教えてください。

4

2 に答える 2

2

ここで皆さんの意見に同意しますが、本当にしたい、またはしなければならなかった場合は、SQL Server で CLR 統合を有効にし、イメージのサイズを変更できるアセンブリを作成して、それをトリガーまたはプロシージャから呼び出すことができます。それほど難しくありません。プロセスを説明するページ: http://msdn.microsoft.com/en-us/library/ms254498(VS.80).aspx

基本的に、SQL Server で CLR を有効にするには:

sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

ac# アセンブリを作成して、イメージのサイズを変更します。

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

プロシージャを作成する

CREATE PROCEDURE ResizeImage AS EXTERNAL NAME ResizeImageAssembly.ResizeImageProc.ResizeImage

その後、通常のプロシージャのように呼び出すことができます。例えば:

EXEC ResizeImage(1,800,600)
于 2012-11-27T15:47:40.827 に答える
1

いくつかのコメントで述べられているように、SQLはデータストレージシステムであり、画像を編集することはできません。

好みの言語(c#など)を使用してテーブルを1回更新してから、各画像を取得してサイズを変更してから、テーブルに更新することをお勧めします。

次に、その時点から、テーブルに挿入された画像が挿入される前にサイズ変更されていることを確認します。

于 2012-06-06T10:41:15.997 に答える