none
Passando parâmetros para tornar campos numa variável de tabela RRS feed

  • Pergunta

  • Olá pessoal,

    Preciso fazer uma procedure onde ela possa verificar determinados meses para executar um update. Só que o usuário terá que digitar os meses que ele desejar e aí eles deverão ser levados para uma variável de tabela e aí fazer um subselect. Mas, para isso, preciso saber como chamar a select com os valores e é aí onde está o meu drama. Como posso fazer isso? Eu tentei da seguinte forma:

    DECLARE @LISTA VARCHAR(MAX)
    DECLARE @CAMPOS VARCHAR(MAX)
    DECLARE @TABELA TABLE(item VARCHAR(MAX))
    SET @LISTA = '1, 2, 3, 4';
    
    SET @CAMPOS = rtrim(ltrim(substring(@LISTA,1,charindex(',',@LISTA,0)-1)));
    
    If LEN(@CAMPOS) > 0
    Begin
    	INSERT INTO @LISTA SELECT @CAMPOS;
    End;
    
    SELECT @LISTA

    Mas está trazendo o erro Must declare the table variable "@LISTA".

    Grato,

    Ilano.

    quinta-feira, 19 de setembro de 2019 19:07

Todas as Respostas

  • Alterei a linha

    INSERT INTO @LISTA SELECT @CAMPOS;

    para

    INSERT INTO @TABELA SELECT @CAMPOS;

    Mas o resultado é só 1,2,3,4 numa só linha da coluna.

    quinta-feira, 19 de setembro de 2019 19:09
  • Também mudei a linha

    SELECT @LISTA

    para

    SELECT @TABELA

    E aí retornou o erro

    Must declare the scalar variable "@TABELA".

    quinta-feira, 19 de setembro de 2019 19:12
  • ilanocf,

    Basta na hora de executar o Select, selecionar todo bloco de Código, incluindo obrigatoriamente o comando Declare.

    Por isso a mensagem de erro esta sendo apresentada, você esta executando somente o Select.

    Não se esqueça de utilizer o comando From em conjunto com o Select, veja abaixo:

    DECLARE @LISTA VARCHAR(MAX), 
            @CAMPOS VARCHAR(MAX)
    Declare @TABELA TABLE(item VARCHAR(MAX))
    
    SET @LISTA = '1, 2, 3, 4';
    
    SET @CAMPOS = rtrim(ltrim(substring(@LISTA,1,charindex(',',@LISTA,0)-1)));
    
    If LEN(@CAMPOS) > 0
    Begin
    	INSERT INTO @Tabela SELECT @CAMPOS
    End
    
    SELECT @LISTA -- Exibindo a valor da @Lista
    
    Select * From @Tabela -- Exibindo o conteúdo da variável.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    quinta-feira, 19 de setembro de 2019 22:30
  • Deleted
    quinta-feira, 19 de setembro de 2019 22:47
  • Olá a todos,

    Primeiro quero agradecer pela atenção de todos.

    Bom, as funções funcionam perfeitamente mas não para o que preciso. O que estou precisando fazer é o seguinte:

    1. Criar uma função que receba números ou strings;

    2. Alimentar uma variável do tipo tabela ou até mesmo uma tabela temporária;

    3. Utilizá-la como condição para uma consulta.

    Por exemplo:

    DECLARE @LISTA VARCHAR(MAX) DECLARE @CAMPOS VARCHAR(MAX) DECLARE @TABELA TABLE(item VARCHAR(MAX)) SET @LISTA = '1, 2, 3, 4'; SET @CAMPOS = rtrim(ltrim(substring(@LISTA,1,charindex(',',@LISTA,0)-1))); If LEN(@CAMPOS) > 0 Begin INSERT INTO @TABELA SELECT @CAMPOS;

    End;

    Depois usar a variável @TABELA nas condições de uma consulta:

    SELECT CODUSUARIO, NOME

    FROM GUSUARIO

    WHERE CODUSUARIO IN (SELECT item FROM @TABELA) // Nesta condição só serão dados do tipo String

    ou

    WHERE IDUSUARIO IN (SELECT item FROM @TABELA) // Nesta condição só serão dados do tipo inteiro

    Mas aí também precisaria criar uma outra variável, para que o usuário informe o tipo de dado.

    Bom, a intensão seria esta já que o sistema que trabalhamos (TOTVS) não permite utilizar XML que funcionaria perfeitamente no SQL Manager mas não é aceito na ferramenta TOTVS.

    domingo, 24 de novembro de 2019 15:29
  • Deleted
    domingo, 24 de novembro de 2019 17:00