Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 表值被设置为另一个表的值,具体取决于一周中的哪一天_Sql_Sql Server 2008 - Fatal编程技术网

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中的方式).我想我应该这么说-我现在会把它添加到问题中如果你以这种方式插入代码,也许有人可以帮助你使其工作。我想,你的编辑将是最后的手段-我正在考虑编辑整个问题,因为插入数据的方式是通过触发器(请参阅:)最后加上它会造成混乱。不过非常感谢!我尝试在插页上做这件事时把事情复杂化了很多,现在我已经按照你的第一个建议工作了!干杯。