sql >> データベース >  >> RDS >> Sqlserver

特定の IMAGE データ型のレコードがテーブルに既に存在するかどうかを判断する方法は?

    私が考えることができる最も効果的な方法は、永続化された 計算列 image 列のハッシュ値。 ハッシュバイト を使用する ハッシュを計算し、一意の制約 を追加します

    テーブル定義:

    create table Images( ID int identity primary key, Img varbinary(max), ImgHash as convert(varbinary(16), hashbytes('MD5', Img)) persisted unique)  

    Images テーブルに対するサンプル コード:

    insert into Images values (convert(varbinary(max), 'Image1')),(convert(varbinary(max), 'Image2'))declare @NewImage varbinary(max) =convert(varbinary(max) ), 'Image2')select count(*)from Imageswhere ImgHash =hashbytes('MD5', @NewImage)  

    一意の制約により、クエリで使用されるインデックスが作成されます。

    画像を追加する SP は、merge を使用して次のようになります。 および 出力 この回答からのトリックで-SQL MERGE ステートメントで何もしない Andriy M 提供 .

     create procedure Images_Add @NewImage varbinary(max)as declare @dummy intmerge Images as Tusing (select @NewImage, hashbytes('MD5', @NewImage)) as S(Img, ImgHash)on T.ImgHash =S.ImgHash が一致しない場合は挿入 (Img) 値 (S.Img) が一致する場合は更新セット @dummy =0 output inserted.ID;   


    1. MYSqlの改行文字を置き換えて機能しない

    2. OctoberCMS:双方向の友情関係を維持する方法は?

    3. パート1:MariaDBサーバーとTensorFlowを使用した画像分類–概要

    4. kshスクリプトを介してDDLを抽出した後にセミコロンがありません