0

我有一个表,其中包含以下列 empid、月、年、day1、day2、day3、day4............day31。

我写了一个SP来每天更新考勤,一旦员工登录。

CREATE PROC PROC_Attendance_update @empid INT, @day INT, @month INT, @year INT 

AS

BEGIN

DECLARE @sql_text VARCHAR(8000)

SET @sql_Text = 'UPDATE tblattendance SET DAY'+CONVERT(VARCHAR(2),@day)+'=''P'' WHERE empid = '+CONVERT(VARCHAR(4), @empid)+'  AND month = '+CONVERT(VARCHAR(4), @month)+' AND Year ='+CONVERT(VARCHAR(4), @year)

EXEC(@sql_text)

END

但是,我不希望它在动态 sql 中。我想将它重写为标准的 T-SQL 代码。

我试过了没有用。

CREATE PROC PROC_Attendance_update @empid INT, @day INT, @month INT, @year INT 

AS

BEGIN

UPDATE tblattendance SET CASE   WHEN @day=1 THEN DAY1 = 'P'

                WHEN @day=2 THEN DAY2 = 'P'

                .

                .

                WHEN @day=31 THEN DAY31 = 'P'               

              END

WHERE empid = @empid AND MONTH = @month AND Year = @Year
END

有人可以帮忙吗?

4

1 回答 1

1
IF @day = 1
    UPDATE tblattendance 
    SET DAY1 = 'P' 
    WHERE empid = @empid 
    AND MONTH = @month AND Year = @Year
ELSE IF @day = 2
    UPDATE tblattendance 
    SET DAY2 = 'P' 
    WHERE empid = @empid 
    AND MONTH = @month AND Year = @Year
ELSE IF @day = 3
    UPDATE tblattendance 
    SET DAY3 = 'P' 
    WHERE empid = @empid 
    AND MONTH = @month AND Year = @Year
--...

或者更好的是,将您的表架构更改为empid, month, year, day, attendance。(甚至empid, date, attendance.)这样,您每天将有一行,并且对表的查询(不,不仅仅是这个)变得更容易管理。

于 2013-03-22T07:12:28.833 回答