2

主キー、外部キーを持つ2つのテーブルで複数の挿入を繰り返す方法を教えてください。これが私がやったことです。これは、何をする必要があるかのほんの一部です。StatusTable には約 200 行あります。このステータス テーブルの詳細を 2 つのテーブル 1、テーブル 2 に分割しようとしています。

各レコードを Table1 に挿入した後、Identity 列を取得しています。これを Table2 に追加して挿入する必要があります。したがって、StatusTable に 200 行ある場合、Table1、Table2 には 200 行あります。

しかし、それはそれが機能している方法ではありません。200 行すべてを Table1 に挿入し、次に Identity を取得してから、1 行を Table2 に挿入しています。私はそれがなぜこれをしているのか知っています。しかし、それを修正する方法がわからない..

     INSERT INTO [dbo].[Table1]
               ([UserID],  
               ,[FirstName].......)
     SELECT 'User1' AS [UserID]
               ,'FirstName'
     FROM [dbo].[StatusTable]

     SELECT @id =  SCOPE_IDENTITY()

     INSERT INTO [dbo].[Table2]
                ([AccountID],[Status]
           values (@id, 'S')

提案してください

4

2 に答える 2

4

OUTPUT 句を使用する

 DECLARE @IDS TABLE (id INT) 

 INSERT INTO [dbo].[Table1]
               ([UserID]  
               ,[FirstName])
     OUTPUT inserted.id INTO @IDS          
     SELECT 'User1' AS [UserID]
               ,'FirstName'
     FROM [dbo].[StatusTable]

     INSERT INTO [dbo].[Table2]
                ([AccountID],[Status])
         SELECT Id, 'S' FROM @IDS
于 2013-05-01T22:03:26.867 に答える
0

一度に 1 行のロジックではなく、セット ベースのアプローチを試してください。最初のテーブルをロードすると、各行を一意にする何かがあれば、2 番目のテーブルへの挿入で最初のテーブルとデータ テーブルを参照できます。

値リストの代わりに select ステートメントを使用できます。

insert into table
select rows from othertable (or multiple tables...it's a select statement as complicated as you wish)

疑似コード:

Insert into table2 (datacolumns)
select table1.id, datacolumn 
from statustable  s 
inner join table1 t
on (whatever makes these rows unique)
于 2013-05-01T21:11:39.100 に答える