【发布时间】:2013-02-20 11:43:48
【问题描述】:
我有两个表,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 的新行中。
我正在寻找有关如何实现这一目标的建议。
提前致谢!
【问题讨论】:
标签: sql sql-server-2008