sql - 如何修复在 SQL 中更新表时出现的错误?
问题描述
尝试通过编写此查询使用其他 2 列(月和年)创建带有日期的列
update [dbo].[National_Data]
set [date] = (SELECT CONVERT(DATE,CONCAT([year] ,'-',[month],'-','01'))
from [dbo].[National_Data])
它返回以下错误:
消息 512,第 16 级,状态 1,第 19 行
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
我想问题是我写的查询没有逐行读取,我该如何解决这个问题?
解决方案
您不需要子查询。只需使用表达式:
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));
推荐阅读
- swift - Swift 不能使用从 reverseGeocodeLocation() 中找到的值
- python - 如果文件夹已经存在,则不允许用户使用 os 模块创建文件夹
- python - 如何在 jupyter notebook 中安装 pygame 包?
- haskell - 在 gi-gtk 中以编程方式创建和填充 TreeView 的示例
- uwp - Windows 10 UWP - 功能:商店上传期间的 Internet(客户端和服务器)选项错误
- javascript - 将“全选”选项添加到一系列复选框
- java - 如何在 spring mvc 中使用通用控制器和存储库
- go - 在本地开发并推送到 github 的正确 golang 工作流程是什么?
- c# - 将 Vector3 位置从一个相机视图复制到另一个
- docker - 如何在不运行进程的 K8S 上运行 utils POD