Digamos que mi estructura de la tabla es como la siguiente:¿Cómo puedo INSERTAR datos en dos tablas simultáneamente en 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)
)
El campo de la primera tabla [id]
corresponde al campo de la segunda [table1_id]
. Lo que me gustaría hacer es insertar datos en ambas tablas en una sola transacción. Ahora ya sé cómo hacer esto haciendo INSERT-SELECT INSERT, así:
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;
Eso es todo bien y bien para pequeños casos como el que sólo está insertando tal vez un puñado de filas. Pero lo que tengo que hacer es insertar un par de cientos de miles de filas, o posiblemente incluso un millón de filas, todas a la vez. Los datos proviene de otra mesa, así que si yo era sólo insertarlo en una sola tabla, que sería fácil, yo sólo tengo que hacer esto:
INSERT INTO [table] ([data])
SELECT [data] FROM [external_table];
Pero ¿cómo voy a hacer esto y dividir el datos en [table1]
y [table2]
, y todavía actualizar [table2]
con el [table1_id]
apropiado como lo estoy haciendo? ¿Es eso posible?
Buena pregunta muchos de los principiantes a SQL a menudo preguntan. –