我有2张桌子。我需要使用表2中特定列中的值更新表1的所有行。它们具有相同的结构。
UPDATE @TempTable
SET [MyColumn] =
(
SELECT [MyColumn]
FROM
[udf_AggregateIDs] (@YearId) AS [af]
INNER JOIN [MyForm] ON
(
[af].[FormID] = [MyForm].[FormID] AND
[af].[FormID] = @MyFormId
)
WHERE [Description] = [MyForm].[Description]
)
我收到一条错误消息,说Subquery返回的值超过1。我只添加了where子句,因为我认为sql正在努力匹配行,但两个表都有相同的行。 它应该返回多个值,因为我试图将MyColumn的所有行从一个表复制到另一个表。 想法?
答案 0 :(得分:0)
描述唯一吗?
select [Description], count(*) from [MyForm] group by [Description] having count(*)>1
答案 1 :(得分:0)
您不需要子查询..只需加入表.. 已回答相同类型的问题here。希望它有所帮助。
答案 2 :(得分:0)
这里必须猜测,因为您的查询不是自我记录的。 MyColumn是否来自该功能? @TempTable是否有描述列?谁知道,因为你没有用别名作为前缀?试试这个。您可能需要进行调整,因为您知道自己的架构而我们没有。
UPDATE t
SET [MyColumn] = func.MyColumn -- have to guess here
FROM dbo.[udf_AggregateIDs] (@YearId) AS func
INNER JOIN dbo.MyForm AS f
ON func.FormID = f.FormID
INNER JOIN @TempTable AS t
ON t.Description = f.Description -- guessing here also
WHERE f.FormID = @MyFormID;