Un Blog su SQL Server e dintorni organizzato In Pillole

Come eseguo una INSERT in SQL Server?

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *