Jump to content
Fórum Script Brasil
  • 0

Stored Procedure


Yuris
 Share

Question

Preciso de uma Ajuda urgente!!: Tive que fazer uma aplicaçao que puxa pra uma gridview o nome dos usuarios e total de horas que eles registraram por dia no sqlserver. Certo, utilizei uma Store Procedure para fazer a chamada. Porém preciso fazer uma atualizaçao nessa chamada, meu grid traz apenas o nome dos usuarios que registraram horas no dia e não de todos, preciso que mostre todos os usuarios do sistema e se algum usuario não registrou horas aparecer em vez das horas trabalhadas a mensagem de "não há horas cadastradas".

//essa é a store procedure

@DtInicio as varchar (10),

@DtFim as varchar (10)

AS

BEGIN

DECLARE @SQL VARCHAR (8000)

DECLARE @SQLConsolidado Varchar(8000)

--/Monta SQL com tabelas

SET @SQL = ' SELECT F.NumFuncionario, '

SET @SQL = @SQL+ ' Nome , '

SET @SQL = @SQL+ ' dbo.ConverteHora(sum((datepart(hh,CAST( TempoTrabalhado AS DATETIME)) * 60 + datepart(mi,CAST( TempoTrabalhado AS DATETIME))))) AS TotalHorasTrabalhadas'

SET @SQL = @SQL+ ' FROM (Tarefa AS T INNER JOIN RegistroTarefa AS R ON T.Numtarefa = R.NumTarefa) '

SET @SQL = @SQL+ ' INNER JOIN Funcionario AS F ON F.NumFuncionario = R.NumFuncionario '

SET @SQL = @SQL+ ' WHERE 1 = 1 AND F.ativo = 1 '

-- > Data

SET @SQL = @SQL+ ' AND ( R.DtSistema >= ''' + @DtInicio + ' 00:00'' AND R.DtSistema <= ''' + @DtFim + ' 23:59'' )'

SET @SQL = @SQL + ' GROUP BY F.NumFuncionario, Nome '

exec (@SQL)

END

na real essa aplicaçao envia por e-mail um relatorio todos os dias pro chefao com as horas registradas pelos funcionarios da empresa. Porém preciso mensinar também os que não registraram.

Não sei o que fazer, sou iniciante ainda e preciso fazer essa aplicação funcionar o mais rapido possivel.. meu emprego depende disso!!

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0
Guest --Rafael --

Pelo que entendi.. As horas registradas pelo usuario ficam cadastradas na Tabela "RegistroTarefa"...

você deveria utilizar um LEFT JOIN.. para ele continuar trazendo os resultados mesmo que não haja horas cadastradas.. não o INNER JOIN....

SET @SQL = @SQL+ ' FROM (Tarefa AS T LEFT JOIN RegistroTarefa AS R ON T.Numtarefa = R.NumTarefa) '

SET @SQL = @SQL+ ' LEFT JOIN Funcionario AS F ON F.NumFuncionario = R.NumFuncionario '

Espero ter ajudado.. Boa sorte..

Rafael

Link to comment
Share on other sites

  • 0

Vlws não foi exatamente como tu descreveu pra resolver meu problema, mas a lógica salvou minha vida hehehe

Tive que por um LEFT JOIN chamando a tabela dos funcionarios tipo:

funcionario LEFT JOIN registrotarefa.

ai na minha aplicaçao apenas coloquei um if dizendo que se o resultado na coluna do registro fosse = Null descrevia que usuario não registrou horas.

Abração.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.7k
×
×
  • Create New...