none
Count de uma tabela em uma variavel RRS feed

  • Pergunta

  • Olá Pessoal

     

    Estou com um problema com um COUNT enfim eu estou contruindo uma PROC que possui uma variavel que por sua vez recebe o resuldado de um COUNT vejam abaixo:

     

    declare @QT_TOTAL_LINHAS int -- Quantidade total de linhas

    declare @STG_NAME table (nome varchar(50)) -- Nome da tabela

    set       @STG_NAME = 'TBL_CIDADE'

    select   @STG_NAME

    set       @QT_TOTAL_LINHAS = (select count(*) from @STG_NAME) O PROBLEMA OCORRE COM ESSE COUNT 

     

    Enfim como fazer um count de uma tabela cujo o nome é recebido por uma variavel ????

     

    Obrigado.

    sexta-feira, 30 de maio de 2008 19:43

Respostas

  • Boa Tarde,

     

    Esse tipo de construção não é permitido por ser simplesmente "indefinido". Você deve fazer da seguinte forma:

     

    Code Snippet

    declare @QT_TOTAL_LINHAS int -- Quantidade total de linhas

    declare @STG_NAME varchar(50) -- Nome da tabela

    declare @cmdSQL nvarchar(100) -- String SQL para execução

    declare @Def nvarchar(50) -- Definição dos parâmetros

     

    set @STG_NAME = 'STG_CIDADE'

    set @Def = N'@qtd_linhas int OUTPUT'

    set @cmdSQL = 'SELECT @qtd_linhas = COUNT(*) FROM ' + @STG_NAME

     

    exec sp_executesql @stmt = @cmdSQL, @params = @Def, @qtd_linhas = @QT_TOTAL_LINHAS OUTPUT

     

    SELECT @QT_TOTAL_LINHAS

     

     

    A construção acima captura o retorno e joga em uma variável. Se parecer complexo, você pode obter o resultado em um ResultSet apenas. Ex:

     

    Code Snippet

    declare @STG_NAME varchar(50) -- Nome da tabela

    declare @cmdSQL nvarchar(100) -- String SQL para execução

     

    set @cmdSQL = 'SELECT COUNT(*) FROM ' + @STG_NAME

    exec sp_executesql @stmt = @cmdSQL

     

     

    [ ]s,

     

    Gustavo

    sexta-feira, 30 de maio de 2008 20:52

Todas as Respostas

  • Olá Antonio,

     

    Use deste jeito:

     

    SELECT @QT_TOTAL_LINHAS = COUNT(*) FROM @STG_NAME

     

    Um abraço,

    Raul Santos

    sexta-feira, 30 de maio de 2008 19:53
  • Olá Raul

     

    Fiz a seguinte alteração no SCRIPT e não funcionou

     

    declare @QT_TOTAL_LINHAS int -- Quantidade total de linhas

    declare @STG_NAME varchar(50) -- Nome da tabela

    set @STG_NAME = 'STG_CIDADE' -- Set do nome da tabela

    set @QT_TOTAL_LINHAS = (SELECT @QT_TOTAL_LINHAS = COUNT(*) FROM @STG_NAME) -- ERRO PERSISTENTE

     

    ERRO

    Msg 102, Level 15, State 1, Line 4

    Incorrect syntax near '='.

     

     

    Eu também executei dessa forma:

     

     

    declare @QT_TOTAL_LINHAS int -- Quantidade total de linhas

    declare @STG_NAME varchar(50) -- Nome da tabela na Stage carregada com sucesso

    set @STG_NAME = 'STG_CIDADE'

    set @QT_TOTAL_LINHAS = 0

    select @QT_TOTAL_LINHAS = count(*) from @STG_NAME

     

    Msg 1087, Level 15, State 2, Line 5

    Must declare the table variable "@STG_NAME".

     

     

    Obrigado.

    sexta-feira, 30 de maio de 2008 20:17
  • Boa Tarde,

     

    Esse tipo de construção não é permitido por ser simplesmente "indefinido". Você deve fazer da seguinte forma:

     

    Code Snippet

    declare @QT_TOTAL_LINHAS int -- Quantidade total de linhas

    declare @STG_NAME varchar(50) -- Nome da tabela

    declare @cmdSQL nvarchar(100) -- String SQL para execução

    declare @Def nvarchar(50) -- Definição dos parâmetros

     

    set @STG_NAME = 'STG_CIDADE'

    set @Def = N'@qtd_linhas int OUTPUT'

    set @cmdSQL = 'SELECT @qtd_linhas = COUNT(*) FROM ' + @STG_NAME

     

    exec sp_executesql @stmt = @cmdSQL, @params = @Def, @qtd_linhas = @QT_TOTAL_LINHAS OUTPUT

     

    SELECT @QT_TOTAL_LINHAS

     

     

    A construção acima captura o retorno e joga em uma variável. Se parecer complexo, você pode obter o resultado em um ResultSet apenas. Ex:

     

    Code Snippet

    declare @STG_NAME varchar(50) -- Nome da tabela

    declare @cmdSQL nvarchar(100) -- String SQL para execução

     

    set @cmdSQL = 'SELECT COUNT(*) FROM ' + @STG_NAME

    exec sp_executesql @stmt = @cmdSQL

     

     

    [ ]s,

     

    Gustavo

    sexta-feira, 30 de maio de 2008 20:52
  • Olá Gustavo

     

     

    Funcionou perfeitamente,

     

    Muito Obrigado

     

     

    Antonio Rodrigues

     

    sexta-feira, 30 de maio de 2008 21:17