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.