0

私は2つのテーブルを持っています。テーブル 1 のすべての行を、テーブル 2 の特定の列の値で更新する必要があります。それらは同じ構造を持っています。

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]
    )

サブクエリが複数の値を返したというエラーが表示されます。SQLが行を一致させるのに苦労していると思ったので、where句のみを追加しましたが、両方のテーブルに同じ行があります。MyColumn のすべての行を 1 つのテーブルから別のテーブルにコピーしようとしているため、複数の値が返されるはずです。アイデア?

4

3 に答える 3

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;
于 2012-06-25T14:03:47.947 に答える
0

説明は一意ですか?

select [Description], count(*) from [MyForm] group by [Description] having count(*)>1
于 2012-06-25T10:53:32.860 に答える
0

サブクエリは必要ありません。テーブルを結合するだけです。同じタイプの質問がここで回答されています。それが役に立てば幸い。

于 2012-06-25T11:00:42.223 に答える