2012-06-25 64 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; 
相關問題