Nov 11 2010

RowNumber no SQL Server

Category: SQL ServerSuzuki @ 09:20
Enumeração de registros no SQL Server

Pessoas que tiveram o contato com o Oracle e ja utilizaram a função que enumera as linhas de uma consulta (o RowNumber) percebem uma certa facilidade para utilização.
E ai derrepente você se depara com uma necessidade deste tipo no SQL Server e fica aquela pergunta: Como faz?
Esta postagem tem o objetivo de apresentar 2 soluções para esta situação:

  1. Utilizando uma tabela temporária com IDENTITY
  2. Utilizando a função ROW_NUMBER() OVER (ORDER BY COLUMN_NAME).


Uma pequena obsevação sobre o segundo método é que ele funciona a partir do SQL Server 2005.
Chega de papo e vamos para a ação.
Inicialmente vamos criar uma tabela temporária (que no caso seria a tabela onde tem os dados que você buscará os dados):

  1. --CRIA TABELA TEMPORÁRIA   
  2. CREATE TABLE #TAB_CLIENTES(   
  3.                CODIGO INT,   
  4.              NOME VARCHAR(200))   
  5. GO  

 

Agora vamos incluir alguns registros para testes e consulta-los:

  1. --INCLUINDO DADOS PARA TESTE   
  2. INSERT INTO #TAB_CLIENTES (CODIGO, NOME) VALUES (1, 'MARIA')   
  3. INSERT INTO #TAB_CLIENTES (CODIGO, NOME) VALUES (2, 'ALEX')   
  4. INSERT INTO #TAB_CLIENTES (CODIGO, NOME) VALUES (3, 'BRUNA')   
  5.   
  6. --VERIFICANDO REGISTROS INSERIDOS   
  7. SELECT *   
  8.   FROM #TAB_CLIENTES  

 

O resultado até o momento será:

 

Agora que temos o cenário montado, vamos ao primeiro método.
Note que é criada uma tabela temporária para então executar o select nesta, e quem dita a ordem de numeração de linhas é o ORDER BY.
Segue:

  1. --MÉTODO 1   
  2. SELECT IDENTITY(INT, 1, 1) AS ROWNUMBER, CODIGO, NOME   
  3.   INTO #TMP   
  4.   FROM #TAB_CLIENTES ORDER BY NOME   
  5.   
  6. SELECT * FROM #TMP  

 

O resultado é:


Para o segundo método, note que não é necessário a criação da tabela temporária e quem dita a numeração é o ORDER BY da função.
Segue o script:

  1. --MÉTODO 2   
  2. SELECT ROW_NUMBER() OVER (ORDER BY NOME) AS ROWNUMBER, *   
  3.   FROM #TAB_CLIENTES   
  4.  ORDER BY NOME   

 

O resultado será como o do primeiro método.
Espero que tenha ajudado. Quaisquer dúvidas comente.
Se desejar fazer o download do script -> Script_RowNumber.sql (722,00 bytes).
Até a próxima.

 

Conhecer o homem, esta é a base de todo o sucesso. (Charles Chaplin)

 

Mais informações:

ROW_NUMBER - http://msdn.microsoft.com/en-us/library/ms186734.aspx

IDENTITY - http://msdn.microsoft.com/en-us/library/aa933196%28SQL.80%29.aspx


Share or Bookmark this post…

Tags: , , , , , , , , , , , , , , , , , , , , ,

Kommentare

1.
trackback DotNetKicks.com says:

RowNumber on SQL Server

You've been kicked (a good thing) - Trackback from DotNetKicks.com

2.
Kala Mervis Kala Mervis United States says:

There is evidently a lot to know about this.  I suppose you made various nice points in features also.

3.
Patsy Draggett Patsy Draggett United States says:

Intimately, the post is in reality the freshest on this noteworthy topic. I concur with your conclusions and will thirstily look forward to your next updates. Saying thanks will not just be enough, for the exceptional lucidity in your writing. I will directly grab your rss feed to stay privy of any updates. Good work and much success in your business efforts!

4.
Mohammad Dobbin Mohammad Dobbin United States says:

Simply wished to say, I seriously enjoy your work on this blog and the quality articles you wrote. These type of article tend to be what keeps me going through the day time. I detected this post right after a great companion of my very own advised it to me. I do a little blogging and site-building personally and I am always thankful to see others giving high quality info towards community. I will surely be following and have bookmarked your page to my facebook account for others to view

5.
pingback thiagosatoshisuzuki.wordpress.com says:

Pingback from thiagosatoshisuzuki.wordpress.com

RowNumber no SQL Server « Thiago Satoshi Suzuki

Voeg kommentaar By


(Sal you Gravatar ikone vertoon)

  Country flag

biuquote
  • Opmerkings
  • Voorskou
Loading