私はこれを長く見すぎたかもしれないので、誰かがここで私を助けてくれることを願っています.
私は、ファイルのメタデータを比較して一意のデータ チャンクを識別し、それによって重複排除の可能性を検出することで遊んでいます...ここに行きます。
drop proc insertFile
go
create proc [dbo].[insertFile] @fileHash char(64), @name varchar(200)
as
set nocount on;
declare @fileId int
declare @klientId int
set @klientId = (SELECT cast(RAND() * 10 + 1 as int))
IF NOT EXISTS (select * from data_file where hash_key = '@fileHash')
begin
insert into data_file (hash_key) values (@fileHash)
end
set @fileId = (select id from data_file where hash_key = '@fileHash')
insert into klient_file (data_file, klient, name) values (@fileId, @klientId, @name)
hash_key には一意の制約があり、存在する値を入力するとこれに違反します。これは発生しないはずです。IF は存在するかどうかをチェックし、ハッシュ値が存在しない場合にのみ挿入する必要があります。
データは何があっても klient_file に入るべきです...
繰り返しますが、エラーは一意の制約の違反であり、IF チェックで回避する必要がありました。IF は、手順ではなく、単独で機能します。何かご意見は?(これはすべて localdb インスタンスで実行されます)