Quero atualizar os 100 principais registros no SQL Server. Eu tenho uma mesa T1
com campos F1
e F2
. T1
possui 200 registros. Quero atualizar o F1
campo nos 100 melhores registros. Como posso atualizar com base TOP 100
no SQL Server?
sql
sql-server
tsql
sql-update
Rajesh
fonte
fonte
order by
também?Sem uma
ORDER BY
idéia todaTOP
, não faz muito sentido. Você precisa ter uma definição consistente de qual direção é "para cima" e qual é "para baixo" para que o conceito de topo seja significativo.No entanto, o SQL Server permite, mas não garante um resultado determinístico .
A
UPDATE TOP
sintaxe na resposta aceita não suporta umaORDER BY
cláusula, mas é possível obter semântica determinística aqui usando uma CTE ou tabela derivada para definir a ordem de classificação desejada, conforme abaixo.fonte
TOP
probabilidades, deve usá-lasORDER BY
porque o que mais lhe interessa é o "mais" ou o "menos" de alguma coisa. Em outros casos, no entanto, você pode estar interessado apenas em obter um registro correspondente. Como eu hoje! Eu precisava corrigir problemas de dados (ciclos) um de cada vez. Todo o processo de correção envolveu um script db, alguma intervenção do usuário e algumas operações do aplicativo. Não nos importamos com qual disco foi tratado primeiro. Nós apenas nos importávamos que estávamos lidando com eles, um de cada vez.WHERE
cláusula para excluir registros processados anteriormente. A pergunta como resposta escrita e aceita não tem sentido. BTW: Para o uso de tabelas como uma fila isso é bastante um link útilwhere
cláusula para evitar o processamento das mesmas linhas repetidas vezes.para aqueles como eu ainda presos no SQL Server 2000,
SET ROWCOUNT {number};
podem ser usados antes daUPDATE
consultalimitará a atualização a 100 linhas
Ele foi preterido pelo menos desde o SQL 2005, mas a partir do SQL 2017 ainda funciona. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
fonte
fonte
O que é ainda mais interessante é o fato de que você pode usar uma função com valor de tabela embutida para selecionar quais (e quantas via
TOP
) linha (s) a atualizar. Isso é:Para a função com valor de tabela, você tem algo interessante para selecionar a linha a ser atualizada, como:
... e aí reside (na minha humilde opinião) o verdadeiro poder de atualizar apenas as principais linhas selecionadas de maneira determinística e ao mesmo tempo simplificar a sintaxe da
UPDATE
declaração.fonte
Tentar:
fonte
Você também pode atualizar de select usando alias e ingressar em:
fonte