我有两个表,table1
包含“用户名”和另外 7 个包含一周中每一天的值的列。table2
包含三列,“用户名”、“日期”和第三列,我希望将其设置table1
为与插入行的日期对应的“星期几”列。第二个表每天为每个用户更新一个新行。
[我希望这是有道理的!]
最初,我正在研究使用计算列的可能性,该列调用一个返回等于星期几的值的函数:
[dbo].[functionName]
(
@colUsername varchar(25),
@colDate date
)
RETURNS numeric(18, 0)
AS
BEGIN
DECLARE @result numeric(18, 0)
SELECT @result = CASE DATEPART(dw, @colDate)
WHEN 1 THEN (SELECT SUNDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
WHEN 2 THEN (SELECT MONDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
WHEN 3 THEN (SELECT TUESDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
WHEN 4 THEN (SELECT WEDNESDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
WHEN 5 THEN (SELECT THURSDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
WHEN 6 THEN (SELECT FRIDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
WHEN 7 THEN (SELECT WORKINGSATURDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
END
RETURN @result
END
并被设置为计算列,如下所示:
ALTER TABLE dbo.table2 ADD
COLNAME AS dbo.functionName(USERNAME, DATE)
GO
这可以正常工作并且正如预期的那样,但是,因为它是一个计算列,当值发生table1
变化时,所有值也会更新,table2
而我需要旧值保持静态,并且table1
只将更新后的值添加到的新行table2
。
我正在寻找有关如何实现这一目标的建议。
提前致谢!