Ok, como você provavelmente pode ver na última parte do título, esta não é uma situação ideal.
Estou usando um software de interface da Web específico do setor do qual garanto que ninguém nunca ouviu falar e, embora a funcionalidade que ele oferece para fazer entrada de dados em massa seja escassa, ele me permite executar consultas SQL diretamente em seu subjacente Banco de dados MS SQL por meio de um formulário da Web limitado a 8.000 caracteres. Esse é o acesso mais direto que tenho ao banco de dados.
Preciso atualizar um determinado campo em cerca de 3.700 registros com dados exclusivos para cada um. De acordo com esta resposta , eu tenho feito o seguinte:
UPDATE guest
SET info4 = CASE guestid
WHEN 12345 THEN 'BNID: 917546553'
WHEN 67890 THEN 'BNID: B04695465'
[etc, etc.]
ELSE info4
END
(No momento, o info4
campo está vazio para todos os registros.) Posso encaixar cerca de 200 casos em uma consulta antes de atingir o limite de caracteres e ter que executar uma nova atualização com o próximo bloco de dados.
Coisas que descobri até agora:
- Não incluir a
ELSE
declaração no final esvaziará o campo em todos os registros que não atendem a um caso. - Antes de confirmar, recebo "Linhas afetadas: [# de linhas na tabela]" em vez do número de linhas que realmente obterão novos dados.
Entendo que deveria colocar um WHERE guestid IN (12345, 67890)
no final para evitar executar a atualização em todas as linhas, mas será um inferno evitar ultrapassar meu limite de caracteres com cada pedaço da instrução de atualização.
Por acaso, atualmente estou pegando meus dados de origem de uma planilha do Excel, colando tudo no Notepad ++, executando localizar/substituir nele para inserir a sintaxe SQL necessária e, em seguida, dividi-los de acordo com o limite de caracteres.
Então, em poucas palavras, minha pergunta é: eu explorei isso na medida do possível? Há algo grande e óbvio que estou perdendo, ou devo abordar isso de uma maneira completamente diferente? Pontos de bônus para menos caracteres por caso!
O
SET
pode ser um pouco mais simples:Salva 6 caracteres por caixa.
Se você pode criar uma tabela (mesmo temporária), também pode usar:
e depois:
Tente algo assim:
Isso atualizará 10 mil linhas por vez. Como as únicas linhas que você precisa atualizar terão um
NULL
for info4, filtramos isso.