Скажем, моя структура таблицы выглядит так:Как я могу вставить данные в две таблицы одновременно в 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]
, как я это делаю? Возможно ли это?
Хороший вопрос для многих новичков на SQL часто спрашивают. –