none
executar query dentro de string RRS feed

  • Pergunta

  • tenho a seguinte query:

    declare
    	@sql varchar(2000),
    	@var varchar(100)
    set @sql = 'select '
    set @sql = @sql + '@var = coluna1 '
    set @sql = @sql + 'from '
    set @sql = @sql + 'tabela '
    print (@sql)

    o esperado é isso: select @var = coluna1 from tabela

    minha pergunta é: porque quando dando faço exec (@sql) ele diz que a variável @var não existe sendo que ela está declarada? é porque está dentro de uma string?

    eu preciso colocar a query em string poruqe vou precisar fazer alguns if's.

    obriagdo

    sexta-feira, 9 de março de 2012 15:35

Respostas

  • Acho que intendi. Tente jogar a declaração da variável dentro da string que será executada.

    declare @comando varchar(max)
    set @comando = ' declare @teste varchar(10)= ''clientes'' SELECT * FROM SYS.OBJECTS WHERE NAME = @teste'
    execute(@COMANDO)

    é isso?

    abraços


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com


    • Editado DhiegoPiroto sexta-feira, 9 de março de 2012 16:39
    • Sugerido como Resposta DhiegoPiroto sexta-feira, 9 de março de 2012 19:00
    • Marcado como Resposta Eder Costa terça-feira, 13 de março de 2012 12:37
    sexta-feira, 9 de março de 2012 16:37
  • Rafa-martin boa noite!

    Acho que você pode tentar usar a sp_executesql pra recuperar o valor da variável dentro do SQL dinâmico. Segue exemplo:

    DECLARE @VarExterna int;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);

    -- Comando SQL
    SET @SQLString = N'SELECT @VarInterna = 1'
    --
    --Definições das variáveis que serão utlizadas como parâmetros      
    SET @ParmDefinition = N'@VarInterna tinyint output';
    --
    -- Execução da instrução
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @VarInterna = @VarExterna out;
    --
    -- Retorno da variável
    select @VarExterna


    Espero que ajude! Luiz Phellipe

    • Sugerido como Resposta Luiz Phellipe sábado, 10 de março de 2012 00:47
    • Marcado como Resposta Eder Costa terça-feira, 13 de março de 2012 12:37
    sábado, 10 de março de 2012 00:47

Todas as Respostas

  • Olá Rafa,

    Você usará SQL dinâmico, apenas tome cuidado com o péssimo desempenho que esta forma de codificar costuma ter, pois naão há reutilização do plano de execução. Bom, para resolver isto você precisará concatenar os valores, pois o sql dinâmico trataria sua variável como um texto.

    exemplo:


    declare @comando varchar(max)
    declare @tabela varchar(max) = 'clientes'
    set @comando = 'SELECT * FROM SYS.OBJECTS WHERE NAME = '''+ @tabela+''''
    execute(@COMANDO)

    Se útil, Classifique.


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com


    • Editado DhiegoPiroto sexta-feira, 9 de março de 2012 16:00
    sexta-feira, 9 de março de 2012 15:57
  • mais veja que tenho uma variável (@var) dentro da string que depois eu vou executar.

    o que preciso é executar essa string com a variável dentro dela. só que se executa da forma q fiz dá erro, dizendo que a minha variável não existe. porque ela está fora da string. entendeu do que preciso?

    sexta-feira, 9 de março de 2012 16:01
  • Acho que intendi. Tente jogar a declaração da variável dentro da string que será executada.

    declare @comando varchar(max)
    set @comando = ' declare @teste varchar(10)= ''clientes'' SELECT * FROM SYS.OBJECTS WHERE NAME = @teste'
    execute(@COMANDO)

    é isso?

    abraços


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com


    • Editado DhiegoPiroto sexta-feira, 9 de março de 2012 16:39
    • Sugerido como Resposta DhiegoPiroto sexta-feira, 9 de março de 2012 19:00
    • Marcado como Resposta Eder Costa terça-feira, 13 de março de 2012 12:37
    sexta-feira, 9 de março de 2012 16:37
  • Rafa-martin boa noite!

    Acho que você pode tentar usar a sp_executesql pra recuperar o valor da variável dentro do SQL dinâmico. Segue exemplo:

    DECLARE @VarExterna int;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);

    -- Comando SQL
    SET @SQLString = N'SELECT @VarInterna = 1'
    --
    --Definições das variáveis que serão utlizadas como parâmetros      
    SET @ParmDefinition = N'@VarInterna tinyint output';
    --
    -- Execução da instrução
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @VarInterna = @VarExterna out;
    --
    -- Retorno da variável
    select @VarExterna


    Espero que ajude! Luiz Phellipe

    • Sugerido como Resposta Luiz Phellipe sábado, 10 de março de 2012 00:47
    • Marcado como Resposta Eder Costa terça-feira, 13 de março de 2012 12:37
    sábado, 10 de março de 2012 00:47