Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL/MS SQL SERVER更新用例_Sql Server_Tsql - Fatal编程技术网

Sql server T-SQL/MS SQL SERVER更新用例

Sql server T-SQL/MS SQL SERVER更新用例,sql-server,tsql,Sql Server,Tsql,我的表包含以下列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'+

我的表包含以下列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
有人能帮忙吗

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
考勤
。(甚至是
empid
date
attention
)这样,您每天将有一行,对表的查询(不,不仅仅是这一行)变得更容易管理。

但是,这会使SP太长,这就是我的想法。@user1532888那么您应该按照我的建议更改表架构。这比处理31个不同的列要容易得多。@user1532888:-IC。解决办法更好。。对于无缝解决方案,您应该首先考虑您的表模式。如果您有机会更改数据库设计,请立即执行。“有人可以帮助您吗?”-我可以将其更改为一种更合理的设计,每天只有一行,但我不认为这是您需要的帮助。