Kailashkumar Raghvani Ответов: 3

Как вставить обновление atteandamce в SQL


у меня есть таблица с именем регистр посещаемости и ее столбец
Код Элемента , Empid В, AttMonth, Д1, Д2 ,Д3,Д4........Д31

В этой таблице каждый день проверяется, существует ли Recoard, а затем обновляется else Insert.

Моя проблема заключается в том, как обновлять день за днем после удара

Что я уже пробовал:

INSERT INTO dbo.EmpPunch
		(
			EmpId, PunchId, PunchInDate,[Status]
		)
		VALUES
		(
			@EmpId, @PunchId, GETDATE(), 'P'
		)
	
	IF NOT EXISTS(SELECT * from dbo.AttendanceRegister WHERE EmpId = @EmpId AND MONTH(AttMonth) = MONTH(GETDATE()) AND YEAR(AttMonth) = YEAR(GETDATE()))
		BEGIN

			INSERT INTO dbo.AttendanceRegister 
			(
				EmpId,AttMonth 
			) 
			VALUES
			(
				@EmpId, GETDATE()
			)
		END

		UPDATE dbo.AttendanceRegister SET
			D16 = 'P'
		WHERE EmpId = @EmpId AND MONTH(AttMonth) = MONTH(GETDATE()) AND YEAR(AttMonth) = YEAR(GETDATE())

3 Ответов

Рейтинг:
2

OriginalGriff

Поскольку SQL по своей сути является многопользовательским, лучшим решением будет выполнить обновление, а если это не сработает, то выполнить вставку:

BEGIN TRANSACTION;
UPDATE AttendanceRegister SET ... WHERE EmpId = @EmpId AND MONTH(AttMonth) = MONTH(GETDATE()) AND YEAR(AttMonth) = YEAR(GETDATE()));
IF @@ROWCOUNT = 0
BEGIN
  INSERT INTO EmpPunch (EmpId, PunchId, PunchInDate,[Status]) VALUES(@EmpId, @PunchId, GETDATE(), 'P');
END
COMMIT TRANSACTION;


Рейтинг:
2

Kailashkumar Raghvani

у меня есть таблица с именем регистр посещаемости и ее столбец
Код Элемента , Empid В, AttMonth, Д1, Д2 ,Д3,Д4........Д31

И моя проблема заключается в том, как динамически обновлять дневную колонку...

Экс.
Август-2011
Если Дата 1 Августа То Обновление D1
Если Дата 2 Августа То Обновление D2
Если Дата 3 Августа То Обновление D3
Если Дата 4 Августа То Обновление D4
.
.
.
.
.
Если Дата 31 Августа То Обновление D31

Если возможно обновление без регистра с использованием динамического

И после того, как Inser новый Recoard в таблице Attandance обновит все значения воскресного столбца Week Off.......


CHill60

Используйте красную ссылку "задать вопрос", если у вас есть вопрос

Рейтинг:
0

RAMASWAMY EKAMBARAM

Следующее создаст запись только если никаких записей уже не существует. По &ЛТ;значение empid в> я имею в виду параметр @empid в в ваш код:

insert into attendanceregister(empid, attmonth)
select a.*
from
(
select <value of empid>, getdate()
) as a,
(
select <value of empid>, month(getdate())
except
select empid, month(attmonth) from attendanceregister
) as b