INSERT (SQL Server Compact)

Aggiunge nuove righe a una tabella.

Sintassi

INSERT [INTO] 
      table_name  [ ( column_list ) ] 
      { VALUES 
      ( { DEFAULT | NULL | expression } [ ,...n] ) 
| derived_table
       }

Argomenti

  • [INTO]
    Parola chiave facoltativa che può essere utilizzata tra INSERT e la tabella di destinazione.

  • table_name
    Nome di una tabella che dovrà ricevere i dati.

  • ( column_list )
    Elenco di una o più colonne a cui aggiungere i dati. L'argomento column_list deve essere racchiuso tra parentesi e delimitato da virgole.

  • VALUES
    Introduce l'elenco di valori di dati da inserire. Deve essere presente un valore di dati per ogni colonna in column_list, se specificato, o nella tabella. L'elenco di valori deve essere racchiuso tra parentesi.

  • DEFAULT
    Richiede che il valore predefinito definito per una colonna venga utilizzato da Microsoft SQL Server Compact.

  • NULL
    Indica che il valore è sconosciuto. Un valore NULL è diverso da un valore vuoto o uguale a zero.

  • expression
    Costante, variabile o espressione.

  • derived_table
    Qualsiasi istruzione SELECT valida che restituisce righe di dati da inserire nella tabella.

Osservazioni

Per sostituire i dati in una tabella, è necessario utilizzare l'istruzione DELETE per eliminare i dati esistenti prima di caricare i nuovi dati con INSERT. Per modificare i valori delle colonne nelle righe esistenti, utilizzare UPDATE.

Se l'argomento column_list viene omesso, i dati vengono inseriti in un elenco di colonne che identifica tutte le colonne della tabella nella sequenza crescente delle posizioni ordinali delle colonne.

È possibile identificare una colonna della tabella una sola volta in column_list*.*

Se una colonna non si trova in column_list, è necessario che SQL Server Compact sia in grado di fornire un valore basato sulla definizione della colonna. In caso contrario, non è possibile caricare la riga. SQL Server Compact imposta automaticamente un valore per la colonna se la colonna:

  • Dispone di una proprietà IDENTITY. Viene utilizzato il successivo valore Identity incrementale.

  • Dispone di un valore predefinito. Viene utilizzato il valore predefinito per la colonna.

  • Ammette valori Null. Viene utilizzato un valore Null.

È necessario utilizzare l'elenco di colonne e l'elenco VALUES quando si inseriscono valori espliciti in una colonna Identity. Se i valori dell'elenco VALUES non sono nello stesso ordine delle colonne nella tabella o se tale elenco non contiene un valore per ogni colonna della tabella, è necessario utilizzare column_list per specificare in modo esplicito la colonna in cui viene archiviato ogni valore in ingresso.

Se si utilizza DEFAULT per specificare il valore di una colonna, viene inserito il valore predefinito di tale colonna. Se non esiste un valore predefinito per la colonna e la colonna consente i valori Null, viene inserito NULL. DEFAULT non è un valore valido per una colonna Identity.

Nelle colonne create con il tipo di dati uniqueidentifier vengono archiviati i valori binari a 16 byte in formato speciale. Diversamente dalle colonne Identity, i valori per le colonne ROWGUID vengono automaticamente generati da SQL Server Compact con il tipo di dati uniqueidentifier. Durante un'operazione di inserimento, è possibile utilizzare variabili con un tipo di dati uniqueidentifier e costanti di stringa nel formato xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, corrispondente a 36 caratteri inclusi i trattini dove x è una cifra esadecimale compresa tra 0 e 9 o tra a e f, per le colonne uniqueidentifier. 6F9619FF-8B86-D011-B42D-00C04FC964FF, ad esempio, è un valore valido per una colonna o una variabile uniqueidentifier.

Quando si inseriscono righe, vengono applicate le regole seguenti:

  • Se un valore viene caricato nelle colonne con un tipo di dati nchar, nvarchar o varbinary, il riempimento o il troncamento degli spazi finali (spazi per nchar e nvarchar, zeri per varbinary) viene determinato in base a quanto definito nella tabella seguente.

    Tipo di dati

    Operazione predefinita

    nchar/binary

    Riempimento del valore originale con spazi finali per le colonne nchar e con zeri finali per le colonne binary, per tutta la lunghezza della colonna.

    nvarchar

    Gli spazi finali nei valori di carattere inseriti nelle colonne nvarchar non vengono eliminati. I valori non vengono riempiti per tutta la lunghezza della colonna.

    varbinary

    Gli zeri finali nei valori binari inseriti nelle colonne varbinary non vengono eliminati. I valori non vengono riempiti per tutta la lunghezza della colonna.

  • Se un'istruzione INSERT viola un vincolo o una regola o se contiene un valore non compatibile con il tipo di dati della colonna, l'istruzione non viene eseguita e in SQL Server Compact viene visualizzato un messaggio di errore.

  • Se INSERT carica più righe con SELECT, qualsiasi violazione di una regola o di un vincolo che abbia origine dai valori caricati provoca l'arresto completo dell'istruzione e nessuna riga viene caricata.

Nota

Per eseguire più query contemporaneamente, includere un punto e virgola (;) e un carattere di nuova riga alla fine di ciascuna istruzione. Tutti i commenti devono iniziare con due trattini (--).

Esempi di codice

A. Utilizzo di un'istruzione INSERT semplice

Nell'esempio seguente viene aggiunta una nuova società alla tabella Customers. Dove determinate informazioni non sono disponibili, viene inserito un valore Null.

INSERT INTO Customers VALUES ('TPC', 'The Phone Company', 'John Kane', 'Owner', NULL, 'Forks', NULL, NULL, 'USA', NULL, DEFAULT);

B. Inserimento di dati in un ordine diverso da quello delle colonne

Nell'esempio seguente vengono utilizzati column_list e l'elenco VALUES per specificare in modo esplicito i valori inseriti in ogni colonna della tabella Customers.

INSERT INTO Customers ([Customer ID], [Company Name], Country, Phone)
VALUES ('WWI', 'Wide World Importers', 'USA', '206-555-0165');

C. Inserimento di dati con un numero di valori inferiore a quello delle colonne

Nell'esempio seguente la tabella Employees contiene tre colonne: EmployeeID, LastName e FirstName. L'istruzione seguente consente di aggiungere Ben Smith alla tabella Employees senza specificare un valore per EmployeeID.

INSERT INTO Employees ([Last Name], [First Name]) VALUES ('Smith', 'Ben');

D. Inserimento di dati mediante una tabella derivata

Nell'esempio seguente viene utilizzata una derived_table per inserire i valori.

INSERT INTO Table1 (col1, col2) SELECT (col1, col2) from Table2;

E. Inserimento di valori di data

Nell'esempio seguente viene illustrato come inserire un valore di data.

INSERT INTO Orders ([Order ID], [Customer ID], [Order Date])
VALUES (34, 'FRANS', '4/2/2004');