none
Criar uma tabela com sequencia de números RRS feed

  • 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
    quinta-feira, 14 de janeiro de 2016 15:34

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
    quinta-feira, 14 de janeiro de 2016 15:45
  • 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
    quinta-feira, 14 de janeiro de 2016 15:56

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
    quinta-feira, 14 de janeiro de 2016 15:45
  • 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
    quinta-feira, 14 de janeiro de 2016 15:56
  • 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 :)

    quinta-feira, 14 de janeiro de 2016 16:13
  • 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]

    quinta-feira, 14 de janeiro de 2016 16:34