none
Como fazer a contagem de registros customizada RRS feed

  • Pergunta

  • Olá pessoal,

    Estou montando uma SP para meu projeto Web, porém me deparei com um problema. Em determinado instante preciso contar a quantidade de registros da tabela. Até aqui normal, mas qd eu passo uma cláusula Where para a SP (que atua como um filtro) a coisa complica... Vejam o exemplo abaixo:

    DECLARE @COUNTER AS Int
    DECLARE @WhereClause as varchar(8000)
    SET @WhereClause ='Nome LIKE ''%RAMON%'''
    IF LEN(@WhereClause) >0
      SET @COUNTER = 0
    ELSE
      SET @COUNTER = (SELECT COUNT(GG_MANAGER_USUARIOS.Usuario) FROM GG_MANAGER_USUARIOS)
    SELECT @COUNTER

    Como deve proceder para fazer o SET @COUNTER =0 (coloquei isso só para não dar erro), para algo do tipo:

    SET @COUNTER = (SELECT COUNT(GG_MANAGER_USUARIOS.Usuario) FROM GG_MANAGER_USUARIOS WHERE @WhereClause)?

    Teoricamente eu teria que montar a instrução SQL em uma string e executá-la, mas como faço isso no SET @COUNTER? Exemplo:

    SET @SQLStatement = 'SELECT COUNT(GG_MANAGER_USUARIOS.Usuario) FROM GG_MANAGER_USUARIOS'
    IF LEN(@WhereClause) >0
     
    SET @SQLStatement = @SQLStatement + ' WHERE ' + @WhereClause
    SET @COUNTER = @SQLStatement
    SELECT @COUNTER

    Sei que não funciona o SET @COUNTER, mas então como fazer algo parecido, que funcione?

    Grato.

    terça-feira, 13 de março de 2007 21:38

Todas as Respostas

  • Tem 2 maneiras de se fazer isso

    • Com query dinamica (Não é a melhor maneira)
    • Usar um pouco de uma lógica que uso muito aqui (SEM QUERY DINAMICA)

     

    SELECT COUNT(GG_MANAGER_USUARIOS.Usuario)

    FROM GG_MANAGER_USUARIOS

    WHERE

    (NOME = @NOME OR @NOME IS NULL) AND --OU TRAZ ONDE NOME = @NOME SENÃO TRAZ TUDO

    (NOME = @TELEFON OR @TELEFONE IS NULL) AND --MESMA LÓGICA PARA N PARAMETROS

     

    Espero ter ajudado

    quarta-feira, 14 de março de 2007 02:21
  • Olá Sergio,

    Entendi, mas meu problema é mais complicado pq eu não tenho cada parâmetro separado, e sim a cláusula WHERE toda montada, que é passada como parâmetro para a SP. Ou seja, como demonstrei no exemplo, tenho um parâmetro @WhereClause e preciso passá-lo para uma instrução SET @COUNTER = Instrução SQL
    Ou seja, acredito que a única forma seja usando uma query dinâmica, mas como fazer isso no valor de uma variável?

    Grato.

    quarta-feira, 14 de março de 2007 09:20
  • tente assim

    Declare @Ret Int

    Declare @Comando_SQL nVarchar(1000)
    Declare @Parametros  nVarchar(1000)

    Select @Comando_SQL = ' Select @Reg = 1 '
    Set @Parametros = N'@Reg int Output'

    exec SP_ExecuteSql @Comando_Sql, @Parametros , @Reg = @Ret Output

    Print @Ret

    veja mais em: http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=1314934&SiteID=21

     

    Abs;

    quarta-feira, 14 de março de 2007 10:02
  • Concordo com o Marcelo a SP_ExecuteSQL é muito útil nestes casos, dá uma olhada no BOL sobre ela.

     

     

     

     

    Abs

    quarta-feira, 14 de março de 2007 12:09
  • Ramon,

    A única observação em relação a utilizar SP_ExecuteSQL, é que ela cria uma nova sessão durante a sua execução.

    quarta-feira, 14 de março de 2007 13:02