Diciamo che la mia struttura della tabella simile a questa:Come posso INSERIRE i dati in due tabelle contemporaneamente in 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)
)
La [id]
campo della prima tabella corrisponde alla [table1_id]
campo della seconda. Quello che mi piacerebbe fare è inserire i dati in entrambe le tabelle in una singola transazione. Ora so già come fare questo facendo INSERT-SELECT-INSERT, in questo modo:
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;
Questo è tutto bene e bene per i piccoli casi come quello in cui si sta solo inserendo forse una manciata di righe. Ma quello che devo fare è inserire un paio di centinaia di righe, o forse anche un milione di righe, tutto in una volta. I dati proviene da un altro tavolo, quindi se ero solo inserendolo in una singola tabella, che sarebbe stato facile, mi resta che fare questo:
INSERT INTO [table] ([data])
SELECT [data] FROM [external_table];
Ma come avrei fatto questo e dividere il dati in [table1]
e [table2]
e aggiornare ancora [table2]
con l'appropriato [table1_id]
mentre lo sto facendo? È possibile?
Bella domanda che molti principianti di SQL chiedono spesso. –