UPDATE configuration
SET Title = ISNULL(@Title,Title),
Description = ISNULL(@Description,Description),
ShowHeader = @ShowHeader,
XmlConfiguration = @XmlConfiguration
WHERE Id = @Id
タイトルが null でないかどうかを確認してから、タイトルを更新します。説明と同じ考えです。
私の理解が正しければ、渡された値がnullでない場合にのみタイトル列をパラメーターの値に設定し、説明列と同様に実行する必要があります。
上記のコードはこれを行います。@Title と @Descriptions の両方が null の場合、対応する 2 つの列の値は変更されませんが、他の列は引き続き更新されます。@Title と @Descriptions の両方が null の場合、PM 77-1 と Lamak の回答は更新をまったく実行しません。
値は変更されないことに注意してください。ただし、実際には update ステートメントは列 (つまり、現在の値) に書き込みます。データの整合性に関しては違いはありませんが、監査や変更追跡の考慮事項に関しては重要な場合があります。
両方のパラメーターが null のときに更新を実行したくない場合は、次のような条件を追加できます。
IF @Title IS NOT NULL OR @Descriptions IS NOT NULL
BEGIN
UPDATE configuration
SET Title = ISNULL(@Title,Title),
Description = ISNULL(@Description,Description),
ShowHeader = @ShowHeader,
XmlConfiguration = @XmlConfiguration
WHERE Id = @Id
END
if ブロックを使用すると、サーバーは最初に 2 つのパラメーター条件を評価するように強制されます。それらを where 句に入れると、サーバーが最初に @Id 条件をチェックすることを決定する可能性があります (可能性は低いですが)。上記のコードは、@Title と @Descriptions の両方が null の場合に潜在的なインデックス シークを回避します。ただし、これはせいぜい非常にわずかな節約です。