-1

次の値を持つ一時テーブルがあります

@TempTable
ID
1
2

一時テーブルの各 ID に対して、次を実行します。

insert into ItemOrganisationSources
    select ByLineID, <TempTable.ID>, SourceTypeID
    from ItemOrganisationSources
    where ItemOrganisationID in (
        select ID from @TempTable)
4

2 に答える 2

1

一時テーブル (「#」で始まるテーブル) があるか、テーブル変数 (例のように「@」で始まる) があるかは、コードからは明確ではありません。ただし、どちらの方法でも、他のテーブルと同じように一時テーブル/変数を参照できます。

テーブル変数:

insert into ItemOrganisationSources
    select i.ByLineID, t.ID, i.SourceTypeID
    from ItemOrganisationSources AS i
    inner join @TempTable AS t
      on i.ID = t.ID --Plug in the appropriate field to join on here
    where i.ItemOrganisationID in (
        select ID from @itemOrganisationIDsToBeDuplicated)

一時テーブル:

insert into ItemOrganisationSources
    select i.ByLineID, t.ID, i.SourceTypeID
    from ItemOrganisationSources AS i
    inner join #TempTable AS t
      on i.ID = t.ID --Plug in the appropriate field to join on here
    where i.ItemOrganisationID in (
        select ID from @itemOrganisationIDsToBeDuplicated)

質問をもう一度読んだ後、一時テーブルを他のデータに結合しようとしているのか、それとも一時テーブルの ID ごとに 1 回だけ挿入しようとしているのか完全にはわかりません。後者の場合、これはめったに使用されない可能性がありますCROSS JOIN

insert into ItemOrganisationSources
    select i.ByLineID, t.ID, i.SourceTypeID
    from ItemOrganisationSources AS i
    cross join #TempTable AS t --cross join instead of inner join
    where i.ItemOrganisationID in (
        select ID from @itemOrganisationIDsToBeDuplicated)
于 2013-04-11T12:40:59.880 に答える
0
    insert into ItemOrganisationSources
    select ByLineID, TT.ID, SourceTypeID
    from ItemOrganisationSources IO JOIN
        @TempTable TT ON TT.ID = IO.ItemOrganisationID 
于 2013-04-11T12:51:59.580 に答える