Как я могу ВСТАВИТЬ данные в две таблицы одновременно в SQL Server?

Допустим, моя структура таблицы выглядит примерно так:

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)
)

Поле [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] и [table2] , и по-прежнему обновлять [table2] с соответствующим [table1_id] , когда я это делаю? Это вообще возможно?

51
задан soapergem 14 September 2010 в 09:34
поделиться