Alterando apenas hora.
Bom dia , preciso diminuir em 1hora os horários de saída dos funcionários. Tenho uma tabela que contem todos os dias da semana (segunda á domingo), e em cada dia tem os horarios de entrada e saída e outra tabela com os Id's dos horários.
Para cada grupo de horario tem uma identificação na tabela de horário (que é a que preciso alterar), essa tabela é assim:
Resultado do select resumido:
comecei a fazer a seguinte procedure
Mas está dando a seguinte mensagem
Mensagem 116, Nível 16, Estado 1, Linha 6
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Mensagem 116, Nível 16, Estado 1, Linha 7
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Para cada grupo de horario tem uma identificação na tabela de horário (que é a que preciso alterar), essa tabela é assim:
Resultado do select resumido:
[IDHORARIO] ,[HORARIO] ,[SEG_ENT1] ,[SEG_SAI1] ,[SEG_ENT2] ,[SEG_SAI2] ,[TER_ENT1] ,[TER_SAI1] ,[TER_ENT2] ,[TER_SAI2]
comecei a fazer a seguinte procedure
DECLARE @idhorario INT = (SELECT idhorario from TB_HORARIO), @hentrada datetime = (select SEG_ENT1, SEG_ENT2, TER_ENT1, TER_ENT2, QUA_ENT1, QUA_ENT2, QUI_ENT1, QUI_ENT2, SEX_ENT1, SEX_ENT2 from TB_HORARIO), @hsaida datetime = (select SEG_SAI1, SEG_SAI2, TER_SAI1, TER_SAI2, QUA_SAI1, QUA_SAI2, QUI_SAI1, QUI_SAI2, SEX_SAI1, SEX_SAI2 from TB_HORARIO)
Mas está dando a seguinte mensagem
Mensagem 116, Nível 16, Estado 1, Linha 6
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Mensagem 116, Nível 16, Estado 1, Linha 7
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Simone
Curtidas 0
Respostas
Marcos P
16/02/2016
declare @hentrada datetime = (select SEG_ENT1, SEG_ENT2, TER_ENT1, TER_ENT2, QUA_ENT1, QUA_ENT2, QUI_ENT1, QUI_ENT2, SEX_ENT1, SEX_ENT2 from TB_HORARIO)
É a tentativa de preencher o valor de uma variável com o conteúdo de várias colunas... Por isso do erro !
A lógica não é essa... você deve atualizar cada uma das colunas ( via Update ) utilizando a função DatedAdd ( com o parâmetro hh )... assumindo, claro, que as colunas são datetime.
Dê uma olhada na sintaxe do DateAdd e, senão conseguir, retorne por aqui com a estrutura da tabela e o resto da query que você está tentando executar.
GOSTEI 0
Simone
16/02/2016
Boa tarde Marcos,
obrigado pela atenção, mas não to conseguindo achar um jeito de alterar horas e minutos de todos os dias de uma unica vez,
a estrutura da tabela é essa
obrigado pela atenção, mas não to conseguindo achar um jeito de alterar horas e minutos de todos os dias de uma unica vez,
a estrutura da tabela é essa
CREATE TABLE [dbo].[HORARIO]( [IDHORARIO] [smallint] NOT NULL DEFAULT ((0)), [DSHORARIO] [nvarchar](40) NOT NULL, [SEG_ENT1] [datetime] NOT NULL , [SEG_SAI1] [datetime] NOT NULL, [SEG_ENT2] [datetime] NOT NULL, [SEG_SAI2] [datetime] NOT NULL, [TER_ENT1] [datetime] NOT NULL, [TER_SAI1] [datetime] NOT NULL , [TER_ENT2] [datetime] NOT NULL , [TER_SAI2] [datetime] NOT NULL , [QUA_ENT1] [datetime] NOT NULL, [QUA_SAI1] [datetime] NOT NULL , [QUA_ENT2] [datetime] NOT NULL, [QUA_SAI2] [datetime] NOT NULL , [QUI_ENT1] [datetime] NOT NULL , [QUI_SAI1] [datetime] NOT NULL , [QUI_ENT2] [datetime] NOT NULL, [QUI_SAI2] [datetime] NOT NULL , [SEX_ENT1] [datetime] NOT NULL, [SEX_SAI1] [datetime] NOT NULL , [SEX_ENT2] [datetime] NOT NULL, [SEX_SAI2] [datetime] NOT NULL )
GOSTEI 0
Marcos P
16/02/2016
A partir do exemplo abaixo...
Fica facil fazer o que você precisa...
select getdate(),dateadd(hh,-1,getdate())
Fica facil fazer o que você precisa...
update horario set seg_ent1 = dateadd(hh,-1,seg_ent1), seg_sai1 = dateadd(hh,-1,seg_sai1), seg_ent2 = dateadd(hh,-1,seg_ent2), seg_sai2 = dateadd(hh,-1,seg_sai2), : :
GOSTEI 0
Simone
16/02/2016
é, achei uma forma, eu concatenei a hora e minuto, e está dando certo . Estava fazendo de outro jeito e estava dando erro.
Quando terminar eu posto aqui como ficou.
Mais uma vez obrigado
Quando terminar eu posto aqui como ficou.
Mais uma vez obrigado
GOSTEI 0
Simone
16/02/2016
Oii, como havia dito, assim que finalizasse ia postar como ficou, desculpe a demora.
Apenas troquei horas por minutos.
Apenas troquei horas por minutos.
update horario set seg_ent1 = dateadd(minute,50,seg_ent1), seg_sai1 = dateadd(minute,70,seg_sai1)
GOSTEI 0