Sql 表值被设置为另一个表的值,具体取决于一周中的哪一天
我有两个表,Sql 表值被设置为另一个表的值,具体取决于一周中的哪一天,sql,sql-server-2008,Sql,Sql Server 2008,我有两个表,table1包含“Username”和另外7列,其中包含一周中每一天的值表2包含三列,“用户名”、“日期”和第三列,我希望将其设置为表1的“星期几”列,对应于插入行的星期几。第二个表每天为每个用户更新一个新行 [我希望这是有道理的!] 最初,我在考虑使用一个计算列的可能性,该列调用一个函数,该函数返回的值等于一周中的某一天: [dbo].[functionName] ( @colUsername varchar(25), @colDate date ) RETURNS
table1
包含“Username”和另外7列,其中包含一周中每一天的值<代码>表2包含三列,“用户名”、“日期”和第三列,我希望将其设置为表1的“星期几”列,对应于插入行的星期几。第二个表每天为每个用户更新一个新行
[我希望这是有道理的!]
最初,我在考虑使用一个计算列的可能性,该列调用一个函数,该函数返回的值等于一周中的某一天:
[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
的新行中
我正在寻找如何实现这一目标的建议
提前谢谢 实现这一点的最简单方法可能是使用您编写的相同函数,但在插入到
表2
时调用它,并且不计算列
如果您有一个带有计算列的工作insert,并且确实无法使insert与作为insert一部分进行的计算一起工作,那么解决这个问题的一种相当老练的方法可能是在表2
上有一个on insert触发器,将计算值复制到另一列。然后在同一个表中有一个变化值和一个稳定值
或者在
表2上有一个插入触发器
调用您的函数来填充值,您应该能够返回到只有一列的稳定值。如果我理解正确,这正是我已经尝试过的,当我意识到函数不支持多行插入时,问题就出现了(这是偶尔将数据添加到表2中的方式).我想我应该这么说-我现在会把它添加到问题中如果你以这种方式插入代码,也许有人可以帮助你使其工作。我想,你的编辑将是最后的手段-我正在考虑编辑整个问题,因为插入数据的方式是通过触发器(请参阅:)最后加上它会造成混乱。不过非常感谢!我尝试在插页上做这件事时把事情复杂化了很多,现在我已经按照你的第一个建议工作了!干杯。