Início > Computadores e Internet, Computers and Internet, SQL Server > Como criar uma tabela contendo uma sequência de "n" números?

Como criar uma tabela contendo uma sequência de "n" números?

Vamos usar a tabela temporária, chamada: #TabelaSequencia

O resultado desejado é:

SELECT n FROM #TabelaSequencia

Seq_Number

Solução A: Usar repetidos comandos ( manualmente )
=================================================
Quando a quantidade de “n” valores é pequena.

CREATE TABLE #TabelaSequencia(n INT)
GO

INSERT INTO #TabelaSequencia(n)
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
UNION
SELECT 10

SELECT n FROM #TabelaSequencia
GO

DROP TABLE #TabelaSequencia
GO

 


 

Solução B: Usar um laço ( loop )
=================================================
Quando a quantidade de “n” valores é grande.
Usando o WHILE no caso n=10, mas poderia ser n=10000

CREATE TABLE #TabelaSequencia(n INT)
GO

WHILE (SELECT ISNULL(MAX(n),0) FROM #TabelaSequencia) < 10
BEGIN
INSERT INTO #TabelaSequencia(n)
SELECT ISNULL(MAX(n),0) + 1 FROM #TabelaSequencia
END
GO

SELECT * FROM #TabelaSequencia
GO

DROP TABLE #TabelaSequencia
GO


 

Solução C: Usar recursividade
=================================================
Quando a quantidade de “n” valores é grande.
Usando o MAXRECURSION no caso n=10, mas poderia ser n=10000

WITH #TabelaSequencia(n) AS
(
SELECT 1
UNION ALL
SELECT n+1 FROM #TabelaSequencia WHERE n < 10
)

SELECT n FROM #TabelaSequencia ORDER BY n
OPTION (MAXRECURSION 10)
GO

 

Caso a quantidade de “n” valores for maior que 32767
Será exibido o aviso de erro:

Msg 310, Level 15, State 1, Line 10
The value 32768 specified for the MAXRECURSION option exceeds the allowed maximum of 32767.

Para resolver  troque o limite (MAXRECURSION 32768) para ZERO (MAXRECURSION 0)

Fonte: http://sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1


 

Faça testes de desempenho/performance, com cada solução, para os limites de “n”:

n n n n n n n
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 32768 32768 32768
4
5
6
7
8
9
10 100 1000 10000 50000 100000 1000000
  1. Nenhum comentário ainda.
  1. 17 de abril de 2015 às 14:39

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

%d blogueiros gostam disto: