具有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
是不确定的。