まず、一意のインデックスまたは制約を使用して、テーブルで重複が発生するのを防ぐことができます。インデックス/制約は連携して機能します 以下の提案とともに。 のみ 以下の解決策のいずれかではなく、一意のインデックスを使用すると、重複レコードを挿入するとエラーがスローされ、反対側でそれを処理する必要があります。
さらに、行が既に存在するかどうかを確認するストアド プロシージャを介してデータを挿入する可能性があります。これを行うには、MERGE のいずれかを使用できます この擬似コードに示すように、ステートメント:
create procedure MyProcedure
(
@Name nvarchar(100),
...
)
as
merge MyTable
using
(
select @Name,...
) as source (Name, ...)
on MyTable.Name = source.Name
when not matched then
insert (Name,...) values (source.Name,...)
when matched then
update set Name = @Name,...
または、レコードの存在を確認し、手動で挿入または更新することもできます:
create procedure MyProcedure
(
@Name nvarchar(100),
...
)
as
if not exists (select * from MyTable where Name = @Name)
begin
insert into MyTable (Name,...) values (@Name,...)
end
else
begin
update MyTable
set ...
where Name = @Name
end