SQL Server 2012 “Denali” CTP 1 – Novidades do ORDER BY

Com o lançamento do Denali, finalmente irá acabar a era das paginações baseadas em sub consultas no SQL Server, surgindo algo semelhante ao LIMIT OFFSET que temos no MySQL e PostGreSQL, conforme demonstrado abaixo:

-- Primeira página
SELECT FirstName, LastName, ContactID
FROM Person.Contact
ORDER BY ContactID
	OFFSET 0 ROWS
	FETCH NEXT 10 ROWS ONLY

-- Próxima página
SELECT FirstName, LastName, ContactID
FROM Person.Contact
ORDER BY ContactID
	OFFSET 10 ROWS
	FETCH NEXT 10 ROWS ONLY

Mas como eram feitas as paginações antes do Denali?

Com ROW_NUMBER:

-- Primeira página
SELECT FirstName, LastName, ContactID
FROM (
	SELECT
		 ROW_NUMBER() OVER (ORDER BY ContactID)
			AS Registro
		,FirstName
		,LastName
		,ContactID
	FROM Person.Contact
) AS Contact
WHERE Registro BETWEEN 1 AND 10

-- Próxima página
SELECT FirstName, LastName, ContactID
FROM (
	SELECT
		 ROW_NUMBER() OVER (ORDER BY ContactID)
			AS Registro
		,FirstName
		,LastName
		,ContactID
	FROM Person.Contact
) AS Contact
WHERE Registro BETWEEN 11 AND 20

Com TOP:

-- Próxima página
SELECT FirstName, LastName, ContactID
FROM (
	SELECT TOP 10 FirstName, LastName, ContactID
	FROM (
		SELECT TOP 20
			 FirstName
			,LastName
			,ContactID
		FROM Person.Contact
		ORDER BY ContactID
	) AS Contact
	ORDER BY ContactID DESC
) AS Contact
ORDER BY ContactID

Com tabela temporária:

-- Próxima página
CREATE TABLE #TMP (
	 Registro INT IDENTITY(1, 1) PRIMARY KEY
	,FirstName NVARCHAR(100) NOT NULL
	,LastName NVARCHAR(100) NOT NULL
	,ContactID INT NOT NULL
)

INSERT INTO #TMP
SELECT TOP 20
	 FirstName
	,LastName
	,ContactID
FROM Person.Contact
ORDER BY ContactID

SELECT FirstName, LastName, ContactID
FROM #TMP
WHERE Registro BETWEEN 11 AND 20

DROP TABLE #TMP

Se alguém tiver alguma contribuição de outra forma de paginação das antigas versões do SQL Server, pode enviar, que ela poderá ser colocada no blog!

Hoje, comecei a acreditar no poder do MS Connect:
https://connect.microsoft.com/SQLServer/feedback/details/124495/implement-limit-keyword

Anúncios

6 pensamentos sobre “SQL Server 2012 “Denali” CTP 1 – Novidades do ORDER BY

  1. show de bola né…
    eu no SQL 2005+ sempre usei CTE para fazer isso na verdade, não gosto muito de sub-consultas, acho a manutenção e a leitura do código um pouco mais complicada.. usava o ROW_NUMBER() dentro da CTE, criando uma coluna nova chamada Linha.. e aí depois era só consultar a CTE filtrando pela coluna nova..

    abs.

    Felipe Ferreira – @SQLBoy

  2. Pingback: SQL Server 11 – Codinome Denali « Fabrício Lima

  3. Pingback: SQL Server 2011 CTP 1 – Resumo « SQL From Hell.com

  4. Pingback: SQL Server 11 – Codinome Denali | Fabrício Lima

  5. Pingback: SQL Server Denali CTP 3 – Resumo « SQL From Hell.com

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s