SQL 2005 – ROW_NUMBER()

 

Existem algumas coisas que não sabemos da existência, outras até conhecemos mas não temos idéia do dia que precisaremos delas. 

Há uns quatro anos eu precisava realizar uma consulta e retornar uma coluna com um seqüencial, numerando as linhas, algo bem simples assim:

 

cod_produto    des_produto                    sequencial

————– —————————— ————-

516E           Arroz                              1

03G            Azeitona                           2

98K            Salame                             3

514A           Tomate                             4

 

Como retornar um sequencial num comando Select simples? Eu não queria usar cursor, nem uma tabela auxiliar, nada disso, queria apenas um seqüencial, simples e objetivo. Enfim, procurei diversos meios e até hoje não soube uma forma simples de fazer isso no SQL Server 2000.

Com o SQL Server 2005 aquele bordão “Seus problemas acabaram” cabe perfeitamente nesse cenário. Existe uma função Row_Number() que  faz exatamente isso. Veja um exemplo:

 

SELECT

      cod_produto,

      des_produto,

      ROW_NUMBER() over (order by des_produto) sequencial

FROM

      tb_teste_produto

 

Como fica subtendido a consulta SQL irá retornar os campos da tabela mais um campo  seqüencial baseado na ordenação do nome do produto.

 

Simples não é?

 

Trabalhando com subconsultas é possível por exemplo atualizar todos os registros entre as linhas 60 e 80 de uma consulta…

 

é o T-SQL dando asas a nossa criatividade!

 

 

Se você tem outra solução para este cenário contribua deixando seu comentário :)

 

 

apenas um comentário

  1. salvadorscardua on

    Esta é uma das 4 funções novas de Rankeamento que vieram com o SQL Server 2005. Lembro quando trabalhava com programação no Postgres em 2006 e tive esta mesma necessidade, não encontrei nada que me ajudasse com isso também na época.


Leave a reply