首页 > 解决方案 > 如何修复在 SQL 中更新表时出现的错误?

问题描述

尝试通过编写此查询使用其他 2 列(月和年)创建带有日期的列

update [dbo].[National_Data]
set [date] = (SELECT CONVERT(DATE,CONCAT([year] ,'-',[month],'-','01'))
              from [dbo].[National_Data])

它返回以下错误:

消息 512,第 16 级,状态 1,第 19 行

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我想问题是我写的查询没有逐行读取,我该如何解决这个问题?

标签: sqlsql-servertsql

解决方案


您不需要子查询。只需使用表达式:

update [dbo].[National_Data]
    set [date] = CONVERT(DATE, CONCAT([year] , '-', [month], '-01'));

您可以使用以下方式更简洁地编写此代码datefromparts()

update [dbo].[National_Data]
    set [date] = datefromparts([year], [month], 1);

或者为了确保该date值与其他两个一致,我建议使用计算列而不是update. 语法如下:

alter table National_Data add date as
    (datefromparts([year], [month], 1));

推荐阅读