假设我的表结构如下所示:
CREATE TABLE [dbo].[table1] (
[id] [int] IDENTITY(1,1) NOT NULL,
[data] [varchar](255) NOT NULL,
CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ([id] ASC)
)
CREATE TABLE [dbo].[table2] (
[id] [int] IDENTITY(1,1) NOT NULL,
[table1_id] [int] NOT NULL,
[data] [varchar](255) NOT NULL,
CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED ([id] ASC)
)
The [id]
第一个表的字段对应于[table1_id]
第二个领域。我想做的是在单个事务中将数据插入到两个表中。现在我已经知道如何通过执行 INSERT-SELECT-INSERT 来做到这一点,如下所示:
BEGIN TRANSACTION;
DECLARE @id [int];
INSERT INTO [table1] ([data]) VALUES ('row 1');
SELECT @id = SCOPE_IDENTITY();
INSERT INTO [table2] ([table1_id], [data]) VALUES (@id, 'more of row 1');
COMMIT TRANSACTION;
对于像您只插入几行的小情况来说,这一切都很好。但我需要做的是一次插入几十万行,甚至可能一百万行。数据来自另一个表,所以如果我只将其插入到一个表中,那就很简单,我只需这样做:
INSERT INTO [table] ([data])
SELECT [data] FROM [external_table];
但我该如何做到这一点并将数据分成[table1]
and [table2]
,并且还在更新[table2]
与适当的[table1_id]
当我这样做的时候?这可能吗?