Inquiridor
Passando parâmetros para tornar campos numa variável de tabela

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.
Todas as Respostas
-
-
-
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]
- Editado Junior Galvão - MVPMVP quinta-feira, 19 de setembro de 2019 22:42
-
-
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:
Mas aí também precisaria criar uma outra variável, para que o usuário informe o tipo de dado.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
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.
-