SQL Server 2005 に更新クエリがあります
update custom_graphics_files
set actual_file_Name = @CorrectName
where actual_file_Name = @FileName
が複数ある場合はactual_file_name
、更新クエリをスキップしたいのですが、
SQL Server 2005 に更新クエリがあります
update custom_graphics_files
set actual_file_Name = @CorrectName
where actual_file_Name = @FileName
が複数ある場合はactual_file_name
、更新クエリをスキップしたいのですが、
update t
set t.actual_file_Name = @CorrectName
FROM custom_graphics_files t
INNER JOIN
(
SELECT actual_file_Name, COUNT(*) TheCount
FROM custom_graphics_files
GROUP BY actual_file_Name
) t2 ON t.actual_file_Name = t2.actual_file_Name AND TheCount = 1
where t.actual_file_Name = @FileName;
この目的のためにウィンドウ関数を使用するのが好きです:
with toupdate as (
select cgf.*, COUNT(*) over (PARTITION by actual_file_name) as ActCnt
from custom_graphics_files
)
update toupdate
set actual_file_Name = @CorrectName
where actual_file_Name = @FileName and ActCnt = 1
大きなテーブルでは、 の選択性によっては、これが最も効率的なソリューションではない場合がありactual_file_Name = @FileName
ます。
これは、取得できる最も「読みやすい」クエリです。
update custom_graphics_files
set actual_file_Name = @CorrectName
where actual_file_Name = @FileName
and (select count(1) from custom_graphics_files where actual_file_Name = @FileName) = 1