ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。