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)