ホームページ >データベース >mysql チュートリアル >SQL Server 2005 で CASE ステートメントの更新を最適化し、テーブル全体のスキャンを回避する方法

SQL Server 2005 で CASE ステートメントの更新を最適化し、テーブル全体のスキャンを回避する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-26 02:59:08979ブラウズ

How to Optimize CASE Statement Updates in SQL Server 2005 to Avoid Full Table Scans?

SQL Server 2005 での CASE ステートメント更新の最適化

元の質問:

CASE ステートメントを使用してレコードを選択的に更新する方法SQL Server 2005 では、影響を受けないものをすべてスキャンせずにrows?

コンテキスト:

次の CASE ステートメントは、dbo.TestStudents テーブルの LASTNAME 列の特定の値を更新するために使用されます:

UPDATE dbo.TestStudents SET LASTNAME = 
( CASE 
WHEN (LASTNAME = 'AAA') THEN 'BBB' 
WHEN (LASTNAME = 'CCC') THEN 'DDD' 
WHEN (LASTNAME = 'EEE') THEN 'FFF' 
ELSE (LASTNAME)
END )

このステートメントは目的を達成していますが、ELSE 条件では、 table.

解決策:

影響を受けない行のスキャンを回避するには、ステートメントに WHERE 句を追加して、更新する行を指定します。

UPDATE dbo.TestStudents SET LASTNAME = CASE 
WHEN LASTNAME = 'AAA' THEN 'BBB' 
WHEN LASTNAME = 'CCC' THEN 'DDD' 
WHEN LASTNAME = 'EEE' THEN 'FFF' 
ELSE LASTNAME
END 
WHERE LASTNAME IN ('AAA', 'CCC', 'EEE')

WHERE 句で更新する LASTNAME 値を指定すると、ステートメントは影響を受ける行のみを更新し、他の行はそのまま残します。行は変更されません。

以上がSQL Server 2005 で CASE ステートメントの更新を最適化し、テーブル全体のスキャンを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。