どういうわけかそれを機能させるのに近いと思いますが、何らかの理由でまだエラーが発生します。
次のUPDATEクエリがあります。
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN @Accessories
WHEN 'Description' THEN @Description
WHEN 'Specification' THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
パラメータは、さまざまなユーザーによって入力されます。私が今直面している問題は、単一のフィールドを更新したい場合でも、他のパラメーターを古いデータで埋めなければならないということです。したがって、オプションIF @parameter IS NULL THENを保持してから、DBにすでに格納されている値を保持します。解決策を見つけようとしたところ、次のクエリのようなものが解決策が動作しません。
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' IS NOT NULL THEN @Accessories
WHEN 'Description' IS NOT NULL THEN @Description
WHEN 'Specification' IS NOT NULL THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
DBはSQL Server 2008に格納されています
助けてくれてありがとう。
明確にするための編集:
元のテーブルはこんな感じ
DeviceID|Name |Details |
10 |Accessories |earplugs |
10 |Description |protectors|
10 |Specification|BeatsByDre|
公開上の理由で、テーブルをオンにするクエリを作成しました。したがって、選択クエリが実行されると、返されるテーブルは次のようになります。
DeviceID|Accessories|Description|Specification|
10 |earplugs |protectors |BeatsByDre |
システムユーザーがアクセサリ、説明、仕様などのさまざまなフィールドを更新できるUIを作成しました。上部に表示されているクエリですべてのフィールドを更新すると、更新が機能します。ただし、テキストボックスを空のままにすると、@ parameterに値がないというエラーが表示されます。したがって、何かが書かれているフィールドのみを更新するソリューションを見つけようとしています。 @parameter IS NULLの場合、DBに元の値を保持します。必要なものに非常に近いが、機能させることができない別の解決策を見つけました。ここに他の解決策があります: https://stackoverflow.com/questions/9387839/mysql-if-not-null-then-display-1-else-display-
これで問題は解決すると思います:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN COALESCE(@Accessories, Details)
WHEN 'Description' THEN COALESCE(@Description, Details)
WHEN 'Specification' THEN COALESCE(@Specification, Details)
ELSE Details
END
WHERE DeviceID = 10 ;
またはこれ(冗長な更新を避けるため):
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN @Accessories
WHEN 'Description' THEN @Description
WHEN 'Specification' THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
AND ( Name = 'Accessories' AND @Accessories IS NOT NULL
OR Name = 'Description' AND @Description IS NOT NULL
OR Name = 'Specification' AND @Specification IS NOT NULL
) ;
またはこれ、テーブル値コンストラクタを使用します:
UPDATE da
SET da.Details = upd.Details
FROM DeviceAttribute AS da
JOIN
( VALUES
('Accessories' , @Accessories),
('Description' , @Description),
('Specification' , @Specification)
) AS upd (Name, Details)
ON upd.Name = da.Name
WHERE da.DeviceID = 10
AND upd.Details IS NOT NULL ;