Usuário com melhor resposta
Criar uma tabela com sequencia de números

Pergunta
-
Olá a todos,
Estou precisando criar uma tabela que com uma sequencia de números entre dois números que eu informar, por exemplo, eu tenho duas variáveis [@Num1 = 10] e [@Num2 = 22], com essas duas variaveis gostaria de criar uma tabela com os números 10, 11, 12, ..., 20,21 e 22.
Alguém se existe algum modo automatizado de fazer isso?
Att,
Gustavo Freitas- Editado Gustavo_Freitas quinta-feira, 14 de janeiro de 2016 15:35 Erro de português
Respostas
-
Tem como criar com WHILE, FETCH CURSOR.
Para automatizar, pode criar uma Table-Valued Function ou Stored Procedure.
Seria mais ou menos assim:
DECLARE @NumMin INT = 10 DECLARE @NumMax INT = 22 DECLARE @Contador INT = @NumMin CREATE TABLE #temporaria (Num INT) WHILE (@Contador <= @NumMax) BEGIN INSERT INTO #temporaria VALUES (@Contador) SET @Contador = @Contador + 1 END
- Marcado como Resposta Marcos SJ quinta-feira, 14 de janeiro de 2016 16:01
-
E para criar a TVF:
CREATE FUNCTION [dbo].[RetornaValores] (@NumMin INT, @NumMax INT) RETURNS @temporaria TABLE (Numero INT ) AS BEGIN DECLARE @Contador INT = @NumMin WHILE (@Contador <= @NumMax) BEGIN INSERT INTO @temporaria VALUES (@Contador) SET @Contador = @Contador + 1 END; RETURN; END;
Para executar a consulta no range de valores, basta fornecer os dois parâmetros:
SELECT * FROM RetornaValores(10,22)
Espero ter ajudado.
- Sugerido como Resposta MarcosLanzarini quinta-feira, 14 de janeiro de 2016 15:56
- Marcado como Resposta Marcos SJ quinta-feira, 14 de janeiro de 2016 16:01
Todas as Respostas
-
Tem como criar com WHILE, FETCH CURSOR.
Para automatizar, pode criar uma Table-Valued Function ou Stored Procedure.
Seria mais ou menos assim:
DECLARE @NumMin INT = 10 DECLARE @NumMax INT = 22 DECLARE @Contador INT = @NumMin CREATE TABLE #temporaria (Num INT) WHILE (@Contador <= @NumMax) BEGIN INSERT INTO #temporaria VALUES (@Contador) SET @Contador = @Contador + 1 END
- Marcado como Resposta Marcos SJ quinta-feira, 14 de janeiro de 2016 16:01
-
E para criar a TVF:
CREATE FUNCTION [dbo].[RetornaValores] (@NumMin INT, @NumMax INT) RETURNS @temporaria TABLE (Numero INT ) AS BEGIN DECLARE @Contador INT = @NumMin WHILE (@Contador <= @NumMax) BEGIN INSERT INTO @temporaria VALUES (@Contador) SET @Contador = @Contador + 1 END; RETURN; END;
Para executar a consulta no range de valores, basta fornecer os dois parâmetros:
SELECT * FROM RetornaValores(10,22)
Espero ter ajudado.
- Sugerido como Resposta MarcosLanzarini quinta-feira, 14 de janeiro de 2016 15:56
- Marcado como Resposta Marcos SJ quinta-feira, 14 de janeiro de 2016 16:01
-
E para criar a TVF:
CREATE FUNCTION [dbo].[RetornaValores] (@NumMin INT, @NumMax INT) RETURNS @temporaria TABLE (Numero INT ) AS BEGIN DECLARE @Contador INT = @NumMin WHILE (@Contador <= @NumMax) BEGIN INSERT INTO @temporaria VALUES (@Contador) SET @Contador = @Contador + 1 END; RETURN; END;
Para executar a consulta no range de valores, basta fornecer os dois parâmetros:
SELECT * FROM RetornaValores(10,22)
Espero ter ajudado.
Obrigado MarcosLazarini.
Resolveu meu problema :)
-
Gustavo,
Uma outra opção, que pode ser adotada seria o uso do objeto Sequence criado a partir do SQL Server 2012, que permite justamente criar uma sequência de valores numéricos para uma tabela.
Veja se este exemplo ajuda:
-- Criando uma nova Tabela -- CREATE TABLE Familia (Nomes varchar(15)) Go INSERT INTO Familia values ('Pedro'), ('Fernanda'), ('Eduardo'), ('João Pedro'), ('Maria Luíza') -- Criando uma nova Sequência de Valores -- CREATE SEQUENCE Seq As INT -- Tipo START WITH 1 -- Valor Inicial (1) INCREMENT BY 1 -- Avança de um em um MINVALUE 1 -- Valor mínimo 1 MAXVALUE 10 -- Valor máximo 10000 CACHE 10 -- Mantém 10 posições em cache NO CYCLE -- Não irá reciclar -- Utilizando a Sequência de Valores -- SELECT Next VALUE FOR Seq AS ID, Nomes FROM Familia; -- Reinicializando a valor da Sequência -- ALTER Sequence Seq RESTART WITH 1 ; -- Utilizando a Sequência de Valores -- SELECT Next VALUE FOR Seq AS ID, Nomes FROM Familia; -- Excluíndo a Sequência -- Drop Sequence Seq
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]