Eu acho que estou de alguma forma perto de fazê-lo funcionar, mas por algum motivo ainda recebo erros.
Eu tenho a seguinte consulta 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
Os parâmetros são preenchidos por diferentes usuários. O problema que enfrento agora é que, mesmo quando você deseja atualizar um único campo, ainda precisa preencher com os dados antigos os outros parâmetros. Portanto, eu gostaria de definir a opção IF @parameter IS NULL THEN, em seguida, mantenha o valor que já está armazenado no banco de dados. Tentei encontrar alguma solução e algo como a seguinte consulta parece ser a solução, mas não consigo fazê-la funcionar:
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
O banco de dados é armazenado no SQL Server 2008
Obrigado antecipadamente pela ajuda.
EDIT para esclarecer:
A tabela original fica assim
DeviceID|Name |Details |
10 |Accessories |earplugs |
10 |Description |protectors|
10 |Specification|BeatsByDre|
Por motivos de publicação, fiz uma consulta para virar a tabela. Portanto, quando a consulta Select é executada, a tabela de retorno se parece com a seguinte
DeviceID|Accessories|Description|Specification|
10 |earplugs |protectors |BeatsByDre |
Criei uma interface do usuário para permitir que os usuários do sistema atualizassem os diferentes campos, como Acessórios, Descrição, Especificação. A atualização funciona se eu atualizar todos os campos com a consulta mostrada na parte superior. No entanto, quando deixo uma caixa de texto vazia, recebo um erro informando que o parâmetro @ está faltando um valor. Então, tentando encontrar uma solução para atualizar apenas o campo onde está algo escrito. Portanto, se @parameter IS NULL, mantenha o valor original no banco de dados. Encontrei outra solução muito próxima do que eu quero, mas não consigo fazê-lo funcionar. Aqui está a outra solução: /programming/9387839/mysql-if-not-null-then-display-1-else-display-0
fonte
UPDATE
declaração a interface do usuário envia ao banco de dados?'@'Accessories
que não faz sentido para mim.Respostas:
Eu acho que isso resolverá o problema:
ou isso (para evitar atualizações redundantes):
ou isso, usando um construtor de valor de tabela:
fonte