Le basi di dati sono lo strumento de facto per l’immagazzinamento di informazioni utili ai più svariati scopi (tracciabilità, analisi, gestione dei processi, qualsiasi businessi insomma…).
Il comando di INSERT è quello che ci permette appunto l’inserimento di nuove informazioni all’interno del nostro database.
Questi i vari modi per lanciare il comando.
Creiamo la classica tabella di test
CREATE TABLE MyTable (
[Id] INT IDENTITY(1, 1),
[Email] NVARCHAR(256) NOT NULL,
[Password] NVARCHAR(256) NOT NULL,
[Salt] INT NOT NULL
)
GO
Insert multipla con specifica dei valori tramite clausola VALUES
INSERT INTO MyTable ([Email], [Password], [Salt]) VALUES ('dummy@email.com', 'my-password1', 31239);
INSERT INTO MyTable ([Email], [Password], [Salt]) VALUES ('noreply@domain.com', 'my-password2', 12309);
INSERT INTO MyTable ([Email], [Password], [Salt]) VALUES ('sample@sqlinpillole.com', 'my-password3', 423094);
GO
Insert singola con specifica dei valori tramite clausola VALUES
INSERT INTO MyTable ([Email], [Password], [Salt])
VALUES
('dummy@email.com', 'my-password1', 31239),
('noreply@domain.com', 'my-password2', 12309),
('sample@sqlinpillole.com', 'my-password3', 423094);
GO
A mio avviso questo metodo è preferibile rispetto al precedente in quanto l’inserimento di righe multiple avviene in un’unica istruzione e singola transazione. Nell’immagine sotto, profilata con SQL Server Profiler, vediamo esattamente il comportamento del singolo batch con numero di righe coinvolte uguale a 3.
Insert da SELECT
INSERT INTO MyTable ([Email], [Password], [Salt])
SELECT 'dummy@email.com', 'my-password1', 31239
UNION SELECT 'noreply@domain.com', 'my-password2', 12309
UNION SELECT 'sample@sqlinpillole.com', 'my-password3', 423094
GO
Creazione tabella con inserimento dati tramite SELECT INTO
SELECT * INTO NewTable FROM MyTable
Da notare che in questo caso NewTable acquisirà la stessa identica struttura di MyTable.
Recupero dell’identity appena inserita
INSERT INTO MyTable ([Email], [Password], [Salt])
VALUES ('identity@sample.com', 'pwd123', 481029);
GO
SELECT @@IDENTITY
-- oppure
SELECT SCOPE_IDENTITY()
GO
Recupero il numero di righe coinvolte nell’istruzione
E’ possibile infine controllare il numero di righe affette dal comando appena eseguito selezionando la variabile @@ROWCOUNT.
Spero che anche questo articolo possa esservi tornato utile. Fatemi sapere nei commenti se conoscete qualche altro metodo per inserire dati.