2012-06-25 62 views
0

我有2个表。我需要使用表2中特定列中的值更新表1的所有行。它们具有相同的结构。将SQL中的值从一个表复制到另一个表

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

您能正确别名所有的列,所以我们有一些线索列表属于哪个表?该函数是否暴露了“MyColumn”或“MyForm”表? “Description”属于哪个表,“@TableTable”还是函数?你可能知道你的模式,但你的观众不知道。如果您想要解决您的查询问题,请提供精确的查询。 –

回答

0

是否说明unique?

select [Description], count(*) from [MyForm] group by [Description] having count(*)>1 
+0

是的,描述是唯一的 –

+0

我为什么要选择描述? –

+0

如果没有重复,此查询将返回重复或不显示任何内容 –

0

你并不需要一个子query..just联接表.. 同一类型的问题已经回答了here。希望能帮助到你。

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; 
相关问题