0
SQL Server 2012のテーブルに一括挿入を実行しているときに、同時にmax()関数を使用して最後に挿入した行を選択して別のテーブルに挿入しています私のテーブルが複数のソースからデータを取得しているときにどのように実行するかは、セカンダリテーブルへの挿入を実行中に、プライマリテーブルで挿入がまだ発生しているので、次回max()が最後に更新されたローをピックアップし、その間にmax()ではなくプライマリ・テーブルにまだ挿入されている行。SQLで複数の入力ソースを持つテーブルに一括挿入を処理する
create table dbo.emp
(
id int primary key identity(1,1),
emp_id int,
name varchar(255),
address varchar(255)
)
create table dbo.empx
(
id int primary key,
emp_id int foreign key references dbo.emp(id),
)
declare @temp int ;
set @temp=1;
while @temp<1000
begin
insert into dbo.emp(emp_id,name,address)values ([email protected],'Ename'+LTRIM(STR(@temp)),'123 Sample Address'+LTRIM(STR(@temp)));
set @[email protected]+1;
insert into dbo.empx select max(dbo.emp.id),max(dbo.emp.emp_id) from dbo.emp
end
出力句dosen'tは、外部キー参照を許可するトリガを使用し、私の場合テーブルにテーブルdbo.empを作成しています ( id int主キーID(1,1)、 emp_id int、 名前varchar(255)、 アドレスvarchar(255)その後) テーブルdbo.empx 作成( ID int型主キーを、 EMP_ID int型の外部キー参照が(IDをdbo.emp)、 ) –
私の更新されたコードを確認してください。..トリガーとしてみてください。.. –
私が最初に考えましたトリガを使用することでしたが、トリガは各インサートで呼び出されます(4lacの挿入を考慮してください)。インサートクエリがトリガを呼び出すよりもはるかに軽くなるわけではありません。 –