3

行をテーブルに挿入し (別のテーブルからの選択クエリから取得)、新しく挿入された行ごとに ID を取得し、元のテーブルを ID で更新するストアド プロシージャが必要です。

疑似コード -

records = select id,city,state,country from USER where name=@name

for each record in records  // for each rows selected
   insert into LOCATION(city,state,country) values(@record.city,@record.state,@record.country); //inserts a value into LOCATION table
   @id = SCOPE_IDENTITY(); // gets the identity of the newly inserted row
   update USER set LocationId=@id where Id=@record.id //updates the new id back to old table's column
end

これは、LOCATION を USER テーブルから分離するデータ移行タスクです。

このスレッドのために時間と労力を割いていただき、ありがとうございます。

4

1 に答える 1

5

次のようなことができます。

DECLARE @InsertedValues TABLE (ID INT, City VARCHAR(50), State VARCHAR(50), Country VARCHAR(50))

INSERT INTO dbo.Location(City, State, Country)
  OUTPUT Inserted.ID, Inserted.City, Inserted.State, Inserted.Country INTO @InsertedValues(ID, City, State, Country)
    SELECT City, State, Country
    FROM dbo.YourSourceTable

これにより、挿入された値 (新しく定義された ID 値を含む@InsertedValues) がテーブル変数に含まれるようになり、必要に応じてソース テーブルを更新できるようになりました。

UPDATE dbo.YourSourceTable
SET 
   Col1 = iv.Col1,
   Col2 = iv.Col2,  -- etc. - do whatever you nee to do here!
FROM @InsertedValues iv
WHERE  .........  -- here, you need some condition to link the inserted values to the original table

これには、カーソルやその他の厄介な RBAR (行単位のアゴナイジング) 処理はまったく必要ありません。すべてが適切にセットベースであり、可能な限り高速です。

この句の詳細についてはOUTPUT、MSDN SQL Server Books Onlineを参照してください。このOUTPUT句は、insert、update、delete ステートメントでも使用できます。

于 2013-01-26T18:08:44.757 に答える