none
montar query sob demanda RRS feed

  • Pergunta

  • Existe alguma forma de executar o retorno do texto dessa query logo após o retorno dela ? Gostaria de jogar o update montado em uma variável e então executá-lo.

     

    select 'UPDATE Addresses SET CIDADE=''' + 'SAO PAULO' + ''' WHERE u_address_id=''' + u_address_id + ''';' + char(10) + 'go' from dbo.Addresses (nolock) where (cep between 01000001 and 05999999 ) and cidade <> 'SAO PAULO';

     

     

     

    terça-feira, 29 de julho de 2008 18:59

Respostas

  • Se for SQL Server 2000 você pode usar a xp_ExecResultSet por ex:

     

    Code Snippet

    SELECT TOP 10

    'EXEC SP_SpaceUsed ' + Name AS SQL

    INTO #TMP_1

    FROM sysobjects

    WHERE xType = 'U'

    EXEC master.dbo.xp_execresultset 'select sql from #TMP_1','NOMEDOBANCO'

     

     

    quarta-feira, 30 de julho de 2008 19:32

Todas as Respostas

  • Boa Tarde,

     

    Você pode executar através de um EXEC ou sp_executesql. Ex:

     

    Code Snippet

    DECLARE @cmdSQL VARCHAR(1000)

    SET @cmdSQL = 'SELECT * FROM dbo.Address'

    EXEC(@cmdSQL)

     

     

    No entanto, como estamos falando de mais de um resultado, você teria que montar um cursor para percorrer todas as linhas e executá-las um a uma.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de julho de 2008 19:22
  • Eu optaria por usar um cursor realmente, fazendo um PRINT logo apos o EXEC.

     

    [ ]s.

     

    quarta-feira, 30 de julho de 2008 13:58
  • Se for SQL Server 2000 você pode usar a xp_ExecResultSet por ex:

     

    Code Snippet

    SELECT TOP 10

    'EXEC SP_SpaceUsed ' + Name AS SQL

    INTO #TMP_1

    FROM sysobjects

    WHERE xType = 'U'

    EXEC master.dbo.xp_execresultset 'select sql from #TMP_1','NOMEDOBANCO'

     

     

    quarta-feira, 30 de julho de 2008 19:32
  • Olá Fabiano,

     

    Excelente dica, eu não conhecia essa procedure e com certeza ela facilita muitas coisas.

    Só achei uma pena que ela não está disponível no SQL Server 2005 mas a dica é muito útil.

     

    [ ]s,

     

    Gustavo

    quarta-feira, 30 de julho de 2008 20:41