[英]SSMS error: Subquery returned more than 1 value… but there is no subquery
[英]Recieving error when updating with subquery within SSMS
我遇到了一个错误,我的子查询返回的值多于允许的“1”。
我正在尝试使用表 [P] 中的 .QUERY 值更新表 [I]。
两个表都来自不同的数据库。 它们在列 ID 中具有相同的值。 我想先尝试一下 ID 的 100-150 作为测试。
UPDATE I
SET I.metadata02 = (SELECT CAST([XML]AS xml)
.query(N'/inkoopfacturen/inkoopfactuur/jaar')
.value('.', 'varchar(30)')
FROM [Archive190404132717].[dbo].[tblArchiveInvoices])
FROM tblindex AS I
INNER JOIN [Archive190404132717].[dbo].[tblArchiveInvoices] AS P
ON I.ID = P.ID
WHERE
I.tasknumber BETWEEN '100' and '150'
好吧,看起来你真正想要的实际上就是这样:
UPDATE I
SET I.metadata02 = CAST([XML] AS xml).query(N'/inkoopfacturen/inkoopfactuur/jaar').value('.', 'varchar(30)')
FROM tblindex I
INNER JOIN [Archive190404132717].[dbo].[tblArchiveInvoices] P ON I.ID = P.ID
WHERE I.tasknumber BETWEEN '100' AND '150';
不需要子查询和对tblArchiveInvoices
的第二次引用; 你已经加入了。
为什么要同时使用子查询和join
? 我假设你想要一个相关的子查询:
UPDATE I
SET I.metadata02 = (SELECT CAST([XML]AS xml)
.query(N'/inkoopfacturen/inkoopfactuur/jaar')
.value('.', 'varchar(30)')
FROM [Archive190404132717].[dbo].[tblArchiveInvoices]
WHERE I.ID = P.ID
)
FROM tblindex I
WHERE I.tasknumber BETWEEN '100' and '150';
此外,名为tasknumber
的字段应该真正存储为数字。 作为字符串的比较可能会产生误导。 如果是数字,去掉单引号。 如果是字符串,你应该意识到'10001
满足WHERE
条件。
也许你正在尝试这样的事情:
UPDATE I
SET metadata02 = X
FROM tblindex AS I
INNER JOIN (SELECT Id, CAST([XML]AS xml).query(N'/inkoopfacturen/inkoopfactuur/jaar').value('.', 'varchar(30)') AS X
FROM [Archive190404132717].[dbo].[tblArchiveInvoices] ) AS P
ON I.ID = P.ID
WHERE I.tasknumber BETWEEN '100' and '150'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.