
Registros aleatórios
Vamos supor que queremos retornar 10 registros aleatórios de uma tabela. Como podemos fazer isto?
A partir do SQL Server 7.0, foi implementada uma uma função chamada NEWID(). Esta função gera um identificador interno aleatório. Para retornar registros aleatórios, podemos fazer assim:
SELECT TOP 10 CAMPO1 , CAMPO2 FROM TABELA1
ORDER BY NEWID()
Para cada registro, um valor aleatório diferente é gerado. A ordem do resultado é feita por este valor e a cada execução temos 10 registros diferentes, pois a cláusula TOP limita a quantidade de registros retornados.
Instruções dinâmicas
O SQL Server permite a construção de instruções dinâmicas a partir do comando EXECUTE(). Funciona assim: montamos uma string com o comando que queremos executar dinamicamente e chamamos a função EXECUTE(). Atenção: neste caso, devemos obrigatoriamente utilizar os parênteses:
EXECUTE(“SELECT CAMPO 1 FROM TABELA1 WHERE CAMPO2 = 3”)
Valor de campo e filtro condicional
Nem sempre queremos mostrar o conteúdo de um campo do jeito que ele está armazenado no banco. Por exemplo: Se o conteúdo de um campo for maior que 10, queremos que seja retornada a string ‘muito’. Se for menor ou igual a 10 retorna ‘pouco’.
Fazemos isto utilizando um CASE (estrutura condicional, como um IF de uma linguagem de programação) para o conteúdo do campo:
SELECT CAMPO1 , TIPO = CASE WHEN CAMPO_VALOR > 10 THEN 'MUITO'
WHEN CAMPO_VALOR <= 10 THEN 'POUCO'
END , CAMPO3
FROM TABELA1
Para cada registro o SQL Server fará uma comparação para identificar qual valor deve ser retornado. Tome cuidado ao utilizar o CASE desta maneira pois pode haver perda de performance na instrução por que a cada linha retornada, um pequeno processamento deve ser efetuado.
Podemos também utilizar o CASE para um filtro da instrução (cláusula WHERE):
SELECT CAMPO1 , CAMPO2 FROM TABELA1
WHERE CAMPO2 > CASE CAMPO1 WHEN 'A' THEN 10
WHEN 'B' THEN 5 END
No exemplo acima, quando o valor do CAMPO1 for igual a ‘A’, somente os registros do CAMPO2 que forem maiores que 10 serão retornados. Quando o valor do CAMPO1 for igual a ‘B’, somente os registros do CAMPO2 que forem maiores que 5 serão retornados.
Leia Mais