0

次の列empid、month、year、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.) こうすると、1 日 1 行になり、テーブルに対するクエリ (いや、これだけではありません) の管理がはるかに簡単になります。

于 2013-03-22T07:12:28.833 に答える