Array
(
)

Alterando apenas hora.

Dbajr
   - 16 fev 2016

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:
#Código


       [IDHORARIO]
      ,[HORARIO]
      ,[SEG_ENT1]
      ,[SEG_SAI1]
      ,[SEG_ENT2]
      ,[SEG_SAI2]
      ,[TER_ENT1]
      ,[TER_SAI1]
      ,[TER_ENT2]
      ,[TER_SAI2]


comecei a fazer a seguinte procedure
#Código
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.

Marcos P
   - 16 fev 2016

#Código

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.

Dbajr
   - 16 fev 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 #Código


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
)

Marcos P
   - 16 fev 2016

A partir do exemplo abaixo...
#Código

select getdate(),dateadd(hh,-1,getdate())


Fica facil fazer o que você precisa...
#Código
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),    
:
:

Dbajr
   - 16 fev 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

Dbajr
   - 23 fev 2016

Oii, como havia dito, assim que finalizasse ia postar como ficou, desculpe a demora.

Apenas troquei horas por minutos.
#Código

update horario
set 
    seg_ent1 = dateadd(minute,50,seg_ent1),
    seg_sai1 = dateadd(minute,70,seg_sai1)