OFFSET e FETCH – SQL Server 2012

Posted: 29th dezembro 2011 by Valdir in Sql-Server
Tags: , , , , ,

Com essas duas novas  funcionalidades, podemos facilmente criar paginação de dados no SQL Sever 2012. O recurso OFFSET serve para definirmos a quantidade de linhas que iremos ignorar, e o FETCH informarmos quantos registros iremos retornar.

Para exemplificar utilizaremos o banco AdventureWorks, faremos um select simples, apenas para confirmar a existência dos dados na base:

USE AdventureWorks2008R2
 
SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate
FROM Sales.Store

Paginação

 

 

 

 

 

Após a confirmar que existem dados na base, iremos apenas complementar o select utilizado acima com um Order BY que somos obrigados a utilizar, e com os comandos OFFSET e FETCH.

USE AdventureWorks2008R2
SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate FROM Sales.Store
 
ORDER BY BusinessEntityID
OFFSET 0 ROWS
FETCH NEXT 3 ROWS ONLY

Neste exemplo, estamos retornando os três primeiros registros da tabela, como definimos zero no comando OFFSET, significa que nenhuma linha está sendo ignorada e no comando FETCH NEXT estamos retornando três registros.

 

Agora no comando abaixo iremos, ignorar os vinte primeiros registros e retornaremos os dez próximos.

USE AdventureWorks2008R2
 
SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate FROM Sales.Store
 
ORDER BY BusinessEntityID
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY


Agora, com pouco código e com muita facilidade criaremos uma procedure para fazer a paginação .

 CREATE PROCEDURE up_paginacao
  (
   @NumPagina INT,
   @QtdRegistroPagina INT
  )
 AS
 SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate
 FROM Sales.Store
 
 ORDER BY BusinessEntityID 
 
 OFFSET (@NumPagina - 1) * @QtdRegistroPagina ROWS
 FETCH NEXT @QtdRegistroPagina ROWS ONLY

Depois de compilar a procedure, vamos testar a execução da mesma:

EXECUTE up_paginacao 5,10

 

Com o retorno dos dados, agora podemos entender o que aconteceu. Foi solicitada a página 5 e 10 registros por página, então o comando OFFSET recebe o valor (5-1) * 10, ou seja, o valor 40 que significa que estamos ignorando os quarenta primeiros registros e estamos definindo no comando FETCH que iremos retornar 10 registros.

Simples assim…fui

Função IIF – SQL Server 2012

Posted: 24th dezembro 2011 by Valdir in Sql-Server
Tags: , , ,

Finalmente a função IIF foi adicionada ao SQL Server, pena que foi incluída somente agora na versão 2012 do SQL SERVER, bom antes tarde do que nunca. Com a função IIF podemos avaliar apenas expressões com dois argumentos, segue abaixo a sintaxe:

IIF (boolean_expression, true_value, false_value)

Abaixo um exemplo de como utilizar a função IIF:

DECLARE @sexo varchar(1) = 'M';
 
SELECT IIF(@sexo = 'M','Masculino','Feminino') AS 'SEXO';

Resultado:

 

 

 

 

 

 

Podemos utilizar a função IIF aninhada a no máximo dez níveis.

Uma nova função para a manipulação de Strings está presente no SQL Server 2012. A função CONCAT retorna o valor resultante da concatenação de dois ou três arumentos. Antes de ver a função, devemos primeiramente criar uma tabela e inserir alguns registros.

CREATE TABLE Telefone(
ID BIGINT NOT NULL IDENTITY,
Ddd VARCHAR(2) NULL,
Telefone VARCHAR(8) NULL
)
 
INSERT INTO Telefone
VALUES
('11','22222222'),
('12','33333333'),
('19','44444444'),
('11','55555555')

Fazendo um select para conferir a inserção dos dados.

 

 

 

 

 

 

 

Agora podemos utilizar a função CONCAT na tabela de telefones, iremos utilizar os campos Ddd e Telefone como parâmetros para concatenar e utilizaremos o separador “-”, para ficar com uma aparencia legal.

SELECT ID, CONCAT(DDD, ' - ',TELEFONE) AS Telefone
FROM Telefone

 

 

 

 

 

 

Nas versões anteriores do Sql Server, concatenávamos da seguinte maneira:

SELECT ID, DDD + ' - ' + TELEFONE AS Telefone
FROM Telefone

 

 

 

 

 

 

Aparentemente o retorno é o mesmo, mas quando trabalhamos com valores nulos, somos obrigados a utilizar outras funções para evitar um resultado não esperado.

INSERT INTO Telefone
VALUES
(NULL,'77777777'),
(NULL,'88888888'),
(NULL,'99999999'),
(NULL,'12345678')

 
 

A declaração GO é usada pelo SQL Server como um finalizador de lote. É reconhecido por ferramentas que rodam scripts como SSMS, SMO, e SQLCMD, mas não é tecnicamente T-SQL. SQL Server 2005 adicionou um novo truque para o comando GO, que permite que você especifique um número de vezes para executar o lote: GO 50

Inserindo linhas de teste em uma tabela

CREATE TABLE tbl_Teste

(

                ID INT IDENTITY (1,1),

                ROWID uniqueidentifier

)

 

GO

 

                INSERT INTO tbl_Teste

                (ROWID)

                VALUES

                (NEWID())

 

GO 50

 

 

Notamos o bloco que está entre o GO e o GO 50 se repete cinqüenta vezes.

Atualizando o Blog

Posted: 8th dezembro 2011 by Valdir in [Off - Topic]

Testando alguns plugins