具有2条以上记录的SQL更新

具有2条以上记录的SQL更新,sql,sql-server,Sql,Sql Server,我正在尝试更新此表中的列: Date1 Date2 ------------------- 2020-09-01 NULL 2020-09-02 NULL 预期结果: Date1 Date2 ---------------------- 2020-09-01 Tuesday 2020-09-02 Wednesday 这是我的更新查询-我得到一个错误,我不确定问题来自哪里。多谢各位 UPDATE table SET Date2 = (select D

我正在尝试更新此表中的列:

Date1        Date2
-------------------
2020-09-01   NULL
2020-09-02   NULL
预期结果:

Date1        Date2
----------------------
2020-09-01   Tuesday
2020-09-02   Wednesday
这是我的更新查询-我得到一个错误,我不确定问题来自哪里。多谢各位

UPDATE table
SET Date2 = (select DATENAME(WEEKDAY, date1) from table)
错误

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

不需要子查询:

UPDATE table
    SET Date2 = DATENAME(WEEKDAY, date1);
也就是说,存储这些冗余信息通常不是一个好主意。您只需调用该函数。

不需要子查询:

UPDATE table
    SET Date2 = DATENAME(WEEKDAY, date1);

也就是说,存储这些冗余信息通常不是一个好主意。您可以只调用函数。

考虑到
Date2
的值基于
date1
的值,那么为什么不使用计算列呢

altertabledbo.[TABLE]删除列date2;
ALTER TABLE dbo.[TABLE]将date2添加为DATENAME(工作日,date1);

考虑到
Date2
的值基于
date1
的值,那么为什么不使用计算列呢

altertabledbo.[TABLE]删除列date2;
ALTER TABLE dbo.[TABLE]将date2添加为DATENAME(工作日,date1);

忘了告诉您,字段Date1是nvarchar。忘了告诉您,字段Date1是nvarchar。@qphan第二行…添加date2。。。。。那么你将拥有两列?将有两列,@qphan。这里的优点还在于,如果更改
date1
的值,
date2
的值也会更改(因为它是在列返回到应用层时计算的)。因此,如果
date1
的值为
2020-09-25
,并更新为
2020-09-26
date2
的值将更改为
'Saturday'
(或您的语言中的相关日期),则不会保留为值
'Friday'
(或该列上次更新时的值)。请注意,在这种情况下,
date2
的值不能
持久化
,因为
DATENAME
是不确定的。@qphan第二行….ADD date2。。。。。那么你将拥有两列?将有两列,@qphan。这里的优点还在于,如果更改
date1
的值,
date2
的值也会更改(因为它是在列返回到应用层时计算的)。因此,如果
date1
的值为
2020-09-25
,并更新为
2020-09-26
date2
的值将更改为
'Saturday'
(或您的语言中的相关日期),则不会保留为值
'Friday'
(或该列上次更新时的值)。请注意,在这种情况下,
date2
的值不能
持久化
,因为
DATENAME
是不确定的。