Sql server T-SQL/MS SQL SERVER更新用例
我的表包含以下列empid、month、year、day1、day2、day3、day4…………day31 我已经编写了一个SP,在员工登录后每天更新考勤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'+
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。解决办法更好。。对于无缝解决方案,您应该首先考虑您的表模式。如果您有机会更改数据库设计,请立即执行。“有人可以帮助您吗?”-我可以将其更改为一种更合理的设计,每天只有一行,但我不认为这是您需要的帮助。