0

重複の可能性:
1 つの行が影響を受ける場合にのみ UPDATE を実行する方法は?

SQL Server 2005 に更新クエリがあります

update custom_graphics_files 
set actual_file_Name = @CorrectName 
where actual_file_Name = @FileName

が複数ある場合はactual_file_name、更新クエリをスキップしたいのですが、

4

3 に答える 3

1
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;
于 2013-02-04T14:11:29.687 に答える
0

この目的のためにウィンドウ関数を使用するのが好きです:

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ます。

于 2013-02-04T14:20:35.247 に答える
0

これは、取得できる最も「読みやすい」クエリです。

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
于 2013-02-04T14:27:02.053 に答える