Aggiunta di righe con INSERT e SELECT
È possibile utilizzare le istruzioni INSERT e SELECT per aggiungere righe a una tabella eseguendo le operazioni seguenti:
Utilizzare l'istruzione INSERT per specificare direttamente i valori o per ottenerli da una sottoquery.
Utilizzare l'istruzione SELECT con la clausola INTO.
Utilizzo di INSERT
L'istruzione INSERT inserisce una o più righe in una tabella. La forma semplificata dell'istruzione è la seguente:
INSERT [INTO] table_or_view [(column_list)] data_values
Quando si esegue questa istruzione, i valori data_values vengono inseriti in una o più righe della tabella o vista specificata. column_list è un elenco delimitato da virgole dei nomi delle colonne in cui si desidera inserire i dati. Se column_list viene omesso, i dati vengono inseriti in tutte le colonne della tabella o della vista.
Se in column_list non sono elencate tutte le colonne di una tabella o di una vista, nelle colonne non specificate viene inserito il valore NULL o l'eventuale valore predefinito associato a ogni colonna. È necessario che per tutte le colonne non incluse nell'elenco sia previsto il supporto di valori Null o un valore predefinito.
Nelle istruzioni INSERT non vengono specificati valori per i tipi di colonne seguenti, poiché in Motore di database di SQL Server i valori di tali colonne vengono generati in modo automatico:
Colonne con la proprietà IDENTITY che genera valori per la colonna.
Colonne a cui è associato un valore predefinito che utilizza la funzione NEWID per generare un valore GUID univoco.
Colonne calcolate.
Le colonne calcolate sono colonne virtuali, ognuna delle quali viene definita come espressione calcolata in base a una o più colonne specificate nell'istruzione CREATE TABLE, ad esempio:
CREATE TABLE TestTable (ColA INT PRIMARY KEY, ColB INT NOT NULL, ColC AS (ColA + ColB) * 2);
Nell'esempio seguente viene illustrato l'inserimento di righe in una tabella con colonne per le quali viene generato automaticamente un valore o è specificato un valore predefinito. Le istruzioni INSERT inseriscono righe che contengono valori solo per alcune delle colonne. Nell'ultima istruzione INSERT non sono specificate colonne e vengono inseriti solo i valori predefiniti.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
column_1 AS 'Computed column ' + column_2,
column_2 varchar(30)
CONSTRAINT default_name DEFAULT ('my column default'),
column_3 rowversion,
column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4)
VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4)
VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2)
VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES;
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO
Utilizzo di INSERT con la clausola VALUE e una sottoquery SELECT
I valori specificati devono corrispondere alle colonne elencate. Il numero dei valori deve essere uguale a quello delle colonne, mentre il tipo di dati, la precisione e la scala di ogni valore devono corrispondere a quelli previsti per i dati della colonna corrispondente. È possibile specificare i valori dei dati nei modi seguenti:
Utilizzando una clausola VALUES per specificare i valori per una riga, come illustrato di seguito:
INSERT INTO MyTable (PriKey, Description) VALUES (123, 'A description of part 123.');
Per ulteriori informazioni, vedere Inserimento di righe tramite INSERT e VALUES.
Utilizzando una sottoquery SELECT per specificare i valori per una o più righe, ad esempio:
INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView;
Per ulteriori informazioni, vedere Inserimento di righe con sottoquery INSERT e SELECT.
Utilizzo di SELECT con INTO
Per creare una nuova tabella da valori di un'altra tabella, è possibile utilizzare SELECT INTO. Ad esempio:
SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM dbo.Customers
WHERE Phone LIKE '492%'
Per ulteriori informazioni, vedere Inserimento di righe con l'istruzione SELECT INTO.
Vedere anche