Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eriva_br

[Resolvido] TOP dinâmico, usando SET ROWCOUNT

Recommended Posts

veremos como utilizar a função ROWCOUNT para realizar uma consulta com a quantidade de retorno de registros de forma dinâmica, definindo o quantidade de retorno de linhas por uma varável

 

definindo banco de dados para teste

--definindo banco de dados para teste		use pubs;
select comum com o uso do TOP fixo

--select comum com o uso do TOP fixo		select top 10 * from authors
caso tentarmos passar a quantidade a ser usada pelo TOP por uma variável, o sql server não aceita

declare @top int		set @top = 3		select top @top * from authors
ao executar a linha acima é retornado o seguinte erro:

Server: Msg 170, Level 15, State 1, Line 9

Line 9: Incorrect syntax near '@top'.

para contornar o erro acima poderiamos usar o EXEC e deixar a query em string, mas desta forma a execução perde performance (nada de anormal, mas perde)

declare @top int		set @top = 3		exec ('select top ' + @top + ' * from authors')

Uma forma de conseguir o mesmo resultado sem usar o EXEC seria com o comando SET ROWCOUNT, ao setar o ROWCOUNT, são afetados somente as quantidades de registros definida para os comandos SELECT, DELETE, INSERT e UPDATE

E com o ROWCOUNT tem-se a opção de ser passado a quantidade por variável

 

exemplo:

declare @top int	   set @top = 3	   	   set rowcount @top	   	   --somente serão retornados 3 registros	   select * from authors

testando no update:

--adicionando uma coluna de testes na tabela authors, seu valor padrão ficará como NULL  alter table authors add ColunaTeste char(1)    --definindo quantidade de registros a serem processados  declare @top int  set @top = 3	     set rowcount @top	     --fazendo update, repare que esta sem WHERE, mas serão executados somente 3 registros  update authors set ColunaTeste = 'x'

para voltar a quantidade de registros a serem processados para o normal, ou seja, todos, basta setar o ROWCOUNT para ZERO (0)

set rowcount 0  select * from authors
verifique que na nossa coluna de testes, somente foram processados no update 3 registros

 

para remover a coluna de testes

alter table authors drop column ColunaTeste

AUTOR: "eriva_br"

 

Dúvidas, criticas, contribuições, correções e adições seram bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.