Estou trabalhando em uma tabela que tem 24 colunas chamadas pp1, pp2... pp24.
Gostaria de passar um parâmetro que seria usado para ajudar a identificar a coluna a ser atualizada.
- um parâmetro é o valor (8)
- um parâmetro é a coluna (5)
- um parâmetro é o rowID (256)
procedimento armazenado curto...
update 'pp'+ [column_parameter]
set value to [value_parameter]
where rowID = [rowID_parameter]
A concatenação do nome da coluna parcial pode ser combinada com um parâmetro?
Isso é realmente uma má ideia, não entendo porque você precisa fazer isso, e não pode ser feito da maneira que você está procurando, mas se você for fazer isso, sugiro declarar 24 variável + 1 para o
RowID
.Por exemplo:
Em seguida, chame seu procedimento e passe
NULL
s para colunas que você não deseja que sejam atualizadas. Essa é a única maneira que consigo pensar nisso.Demonstração de amostra
ATUALIZAR:
Você nem precisa de DynamicSQL, então seu
SP
pode parecerIsso pode ser feito executando uma atualização "sem operação" nas outras colunas.
Antes da atualização:
Após atualização:
O que eu mostrei funcionará tão bem com tabelas normais e um procedimento armazenado. Se as colunas forem de tipos de dados diferentes, você pode declarar @value como sql_variant .
Definir as colunas com seus valores existentes não deve resultar em gravações adicionais. Veja aqui uma análise.
Embora isso possa funcionar, a coisa toda tem cheiro de código por toda parte. Ter colunas numeradas sugere que as tabelas não são normalizadas. As colunas devem ter um propósito fixo para que o código saiba exatamente qual deles referenciar em cada circunstância. Eu estou supondo que o aplicativo permite campos especificados em tempo de execução e esta é a implementação?
Como não fiz a estrutura da tabela (código legado) precisava de uma solução rápida e suja - então fui com um SQL dinâmico.
Obrigado a todos pelas respostas e comentários.