INSERT (Transact-SQL)

Aggiunge una o più righe nuove a una tabella oppure a una vista in SQL Server 2008 R2. Per alcuni esempi, vedere Esempi di istruzioni INSERT (Transact-SQL).

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

-- Standard INSERT syntax
[ WITH <common_table_expression> [ ,...n ] ]
INSERT 
{
        [ TOP ( expression ) [ PERCENT ] ] 
        [ INTO ] 
        { <object> | rowset_function_limited 
          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ] }
    {
        [ ( column_list ) ] 
        [ <OUTPUT Clause> ]
        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ] 
          | derived_table 
          | execute_statement
          | <dml_table_source>
          | DEFAULT VALUES 
        }
    }
}
[; ]

-- Syntax for external tool only
INSERT 
{
    [BULK]
    [ database_name . [ schema_name ] . | schema_name . ]
    [ table_name | view_name ]
    ( <column_definition> )
    [ WITH (
        [ [ , ] CHECK_CONSTRAINTS ]
        [ [ , ] FIRE_TRIGGERS ]
        [ [ , ] KEEP_NULLS ]
        [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]
        [ [ , ] ROWS_PER_BATCH = rows_per_batch ]
        [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
        [ [ , ] TABLOCK ]
           ) ]
}
[; ]

<object> ::=
{ 
    [ server_name . database_name . schema_name . 
      | database_name .[ schema_name ] . 
      | schema_name . 
    ]
  table_or_view_name
}

<dml_table_source> ::=
    SELECT <select_list>
    FROM ( <dml_statement_with_output_clause> ) 
      [AS] table_alias [ ( column_alias [ ,...n ] ) ]
    [ WHERE <search_condition> ]
        [ OPTION ( <query_hint> [ ,...n ] ) ]

<column_definition> ::=
 column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<data type> ::= 
[ type_schema_name . ] type_name 
    [ ( precision [ , scale ] | max ]

Argomenti

  • WITH <common_table_expression>
    Specifica il set di risultati denominato temporaneo, noto anche come espressione di tabella comune, definito nell'ambito dell'istruzione INSERT. Il set di risultati è derivato da un'istruzione SELECT.

    Le espressioni di tabella comuni (CTE, Common Table Expression) possono essere utilizzate anche con le istruzioni SELECT, DELETE, UPDATE, MERGE e CREATE VIEW. Per ulteriori informazioni, vedere WITH common_table_expression (Transact-SQL).

  • TOP (expression) [ PERCENT ]
    Specifica il numero o la percentuale di righe casuali che verranno inserite. expression può essere un numero o una percentuale delle righe. Le righe cui viene fatto riferimento nell'espressione TOP utilizzata con INSERT, UPDATE o DELETE non sono ordinate.

    Le parentesi per la delimitazione di expression nell'espressione TOP sono obbligatorie per le istruzioni INSERT, UPDATE e DELETE. Per ulteriori informazioni, vedere TOP (Transact-SQL).

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

  • server_name
    Nome del server collegato in cui si trova la tabella o la vista. È possibile specificare server_name come nome di server collegato o tramite la funzione OPENDATASOURCE.

    Quando server_name viene specificato come server collegato, database_name e schema_name sono obbligatori. Quando server_name viene specificato con OPENDATASOURCE, database_name e schema_name possono non essere validi per tutte le origini dati e non essere soggetti alle funzionalità del provider OLE DB che accede all'oggetto remoto. Per ulteriori informazioni, vedere Query distribuite.

  • database_name
    Nome del database.

  • schema_name
    Nome dello schema cui appartiene la tabella o la vista.

  • table_or view_name
    Nome della tabella o della vista in cui si desidera inserire i dati.

    Una variabile table, all'interno del proprio ambito, può essere utilizzata come origine della tabella in un'istruzione INSERT.

    È necessario che la vista cui si fa riferimento in table_or_view_name sia aggiornabile e includa un riferimento esatto a un'unica tabella di base nella clausola FROM della vista. Ad esempio, in un'istruzione INSERT eseguita in una vista a più tabelle è necessario specificare un argomento column_list che fa riferimento solo alle colonne di una tabella di base. Per ulteriori informazioni sulle viste aggiornabili, vedere CREATE VIEW (Transact-SQL).

  • rowset_function_limited
    Funzione OPENQUERY o OPENROWSET. L'utilizzo di queste funzioni è soggetto alle funzionalità del provider OLE DB che accede all'oggetto remoto. Per ulteriori informazioni, vedere Query distribuite.

  • WITH ( <table_hint_limited> [... n ] )
    Specifica uno o più hint di tabella consentiti per una tabella di destinazione. La parola chiave WITH e le parentesi sono obbligatorie.

    Le opzioni READPAST, NOLOCK e READUNCOMMITTED non sono consentite. Per ulteriori informazioni sugli hint di tabella, vedere Hint di tabella (Transact-SQL).

    Nota importanteImportante

    La funzionalità che consente di specificare gli hint HOLDLOCK, SERIALIZABLE, READCOMMITTED, REPEATABLEREAD o UPDLOCK su tabelle specificate come destinazione di istruzioni INSERT verrà rimossa a partire da una delle prossime versioni di SQL Server. Questi hint non influiscono sulle prestazioni delle istruzioni INSERT. Evitarne l'utilizzo in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui sono attualmente implementati.

    La specifica di un hint TABLOCK in una tabella di destinazione di un'istruzione INSERT equivale alla specifica dell'hint TABLOCKX poiché determina l'acquisizione di un blocco esclusivo sulla tabella.

  • (column_list)
    Elenco di una o più colonne in cui inserire i dati. column_list deve essere racchiuso tra parentesi e delimitato da virgole.

    Se una colonna non è presente nell'elenco column_list, il Motore di database deve essere in grado di fornire un valore in base alla definizione della colonna. In caso contrario, la riga non può essere caricata. Nel Motore di database viene fornito automaticamente un valore se la colonna soddisfa i requisiti seguenti:

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

    • Include un valore predefinito. Viene utilizzato il valore predefinito della colonna.

    • Il tipo di dati è timestamp. Viene utilizzato il valore timestamp corrente.

    • Ammette valori Null. Viene utilizzato un valore Null.

    • È una colonna calcolata. Viene utilizzato il valore calcolato.

    Quando vengono inseriti valori espliciti in una colonna Identity, è necessario utilizzare column_list e un elenco di valori. L'opzione SET IDENTITY_INSERT deve essere inoltre impostata su ON per la tabella.

  • Clausola OUTPUT
    Restituisce le righe inserite come parte dell'operazione di inserimento. I risultati possono essere restituiti all'applicazione di elaborazione o possono essere inseriti in una tabella o in una variabile di tabella per essere elaborati ulteriormente.

    La clausola OUTPUT non è supportata in istruzioni DML che fanno riferimento a viste partizionate locali, viste partizionate distribuite o tabelle remote oppure in istruzioni INSERT che contengono un parametro execute_statement. La clausola OUTPUT INTO non è supportata in istruzioni INSERT che contengono una clausola <dml_table_source>.

  • VALUES
    Parola chiave che introduce l'elenco o gli elenchi di valori dei dati da inserire. Deve essere disponibile un valore per ogni colonna in column_list (se specificato) o nella tabella. L'elenco di valori deve essere racchiuso tra parentesi.

    Se i valori dell'elenco di valori non sono nello stesso ordine delle colonne della tabella o se non è disponibile un valore per ogni colonna della tabella, è necessario utilizzare column_list per specificare in modo esplicito la colonna in cui vengono archiviati i valori inseriti.

    È possibile utilizzare il costruttore di riga di Transact-SQL, denominato anche costruttore di valori di tabella, per specificare più righe in una singola istruzione INSERT. Il costruttore di riga è costituito da una singola clausola VALUES con più elenchi di valori racchiusi tra parentesi e separati da una virgola. Per ulteriori informazioni, vedere Costruttore di valori di tabella (Transact-SQL).

  • DEFAULT
    Forza il caricamento nel Motore di database del valore predefinito di una colonna. Se per la colonna non è disponibile alcun valore predefinito e la colonna ammette valori NULL, viene inserito un valore NULL. Per una colonna definita con il tipo di dati timestamp, viene inserito il valore timestamp successivo. DEFAULT non è un valore valido per una colonna Identity.

  • expression
    Costante, variabile o espressione. L'espressione non può contenere un'istruzione EXECUTE.

    Quando si fa riferimento ai tipi di dati dei caratteri Unicode nchar, nvarchar e ntext, "expression" deve essere preceduto dalla lettera maiuscola "N". Se la lettera "N" viene omessa, in SQL Server la stringa viene convertita in base alla tabella codici corrispondente alle regole di confronto predefinite del database o della colonna. I caratteri non trovati nella tabella codici vengono persi. Per ulteriori informazioni, vedere Programmazione sul lato server con Unicode.

  • derived_table
    Qualsiasi istruzione SELECT valida che restituisce righe di dati da caricare nella tabella. L'istruzione SELECT non può contenere un'espressione di tabella comune.

  • execute_statement
    Qualsiasi istruzione EXECUTE valida che restituisce dati con le istruzioni SELECT o READTEXT.

    Se si utilizza execute_statement con INSERT, ogni set di risultati deve essere compatibile con le colonne nella tabella o in column_list.

    È possibile utilizzare execute_statement per eseguire stored procedure nello stesso server o in un server remoto. Viene eseguita la procedura nel server remoto e i set di risultati vengono restituiti al server locale e caricati nella tabella relativa. In una transazione distribuita execute_statement non può essere eseguito in un server collegato di loopback quando per la connessione è abilitato MARS (Multiple Active Result Set).

    Se execute_statement restituisce dati con l'istruzione READTEXT, ogni istruzione READTEXT può restituire al massimo 1 MB (1024 KB) di dati. È inoltre possibile utilizzare execute_statement con procedure estese. In questo caso, execute_statement inserisce i dati restituiti dal thread principale della procedura estesa. L'output dei thread diversi da quello principale non viene tuttavia inserito.

    Un parametro con valori di tabella non può essere specificato come destinazione di un'istruzione INSERT EXEC, ma può essere specificato come origine nella stringa INSERT EXEC o nella stored procedure. Per ulteriori informazioni, vedere Parametri con valori di tabella (Motore di database).

  • <dml_table_source>
    Specifica che le righe inserite nella tabella di destinazione sono quelle restituite dalla clausola OUTPUT di un'istruzione INSERT, UPDATE, DELETE o MERGE, facoltativamente filtrate da una clausola WHERE. Se si specifica <dml_table_source>, la destinazione dell'istruzione INSERT esterna deve soddisfare le restrizioni seguenti:

    • Deve essere una tabella di base e non una vista.

    • Non può essere una tabella remota.

    • Non può includere trigger definiti.

    • Non può partecipare ad alcuna relazione di chiave primaria/chiave esterna.

    • Non può partecipare alla replica di tipo merge né a sottoscrizioni aggiornabili per la replica transazionale.

    Il livello di compatibilità del database deve essere impostato su 100 o più. Per ulteriori informazioni, vedere Clausola OUTPUT (Transact-SQL).

  • <select_list>
    Elenco delimitato da virgole che specifica le colonne restituite dalla clausola OUTPUT da inserire. Le colonne in <select_list> devono essere compatibili con le colonne in cui vengono inseriti i valori. <select_list> non può fare riferimento a funzioni di aggregazione né a TEXTPTR.

    Nota

    Qualsiasi variabile elencata nell'elenco SELECT fa riferimento ai rispettivi valori originali, indipendentemente da qualsiasi modifica apportata a tali valori in <dml_statement_with_output_clause>.

  • <dml_statement_with_output_clause>
    Istruzione INSERT, UPDATE, DELETE o MERGE valida che restituisce le righe interessate in una clausola OUTPUT. L'istruzione non può contenere una clausola WITH e non può avere come destinazione tabelle remote o viste partizionate. Se si specifica UPDATE o DELETE, non può trattarsi di un'istruzione UPDATE o DELETE basata su cursori. Non è possibile fare riferimento alle righe di origine come istruzioni DML nidificate.

  • WHERE <search_condition>
    Qualsiasi clausola WHERE contenente un valore valido per <search_condition> in grado di filtrare le righe restituite da <dml_statement_with_output_clause>. Per ulteriori informazioni, vedere Condizione di ricerca (Transact-SQL). Se utilizzato in questo contesto, <search_condition> non può contenere sottoquery, funzioni scalari definite dall'utente che eseguono l'accesso ai dati, funzioni di aggregazione, TEXTPTR o predicati di ricerca full-text.

  • DEFAULT VALUES
    Forza l'inserimento nella nuova riga dei valori predefiniti associati a ogni colonna.

  • BULK
    Utilizzato dagli strumenti esterni per caricare un flusso di dati binario. Questa opzione non è destinata all'utilizzo con gli strumenti come SQL Server Management Studio, SQLCMD, OSQL o API di accesso ai dati come SQL Server Native Client.

  • FIRE_TRIGGERS
    Specifica che gli eventuali trigger di inserimento definiti nella tabella di destinazione vengano eseguiti durante l'operazione di caricamento del flusso di dati binario. Per ulteriori informazioni, vedere BULK INSERT (Transact-SQL).

  • CHECK_CONSTRAINTS
    Specifica che tutti i vincoli sulla tabella o sulla vista di destinazione devono essere controllati durante l'operazione di caricamento del flusso di dati binario. Per ulteriori informazioni, vedere BULK INSERT (Transact-SQL).

  • KEEPNULLS
    Specifica che le colonne vuote devono mantenere un valore null durante l'operazione di caricamento del flusso di dati binario. Per ulteriori informazioni, vedere Mantenimento dei valori Null o utilizzo dei valori predefiniti durante un'importazione bulk.

  • KILOBYTES_PER_BATCH = kilobytes_per_batch
    Specifica il numero approssimativo di kilobyte (KB) di dati per ogni batch come kilobytes_per_batch. Per ulteriori informazioni, vedere BULK INSERT (Transact-SQL).

  • ROWS_PER_BATCH =rows_per_batch
    Indica il numero approssimativo di righe di dati nel flusso di dati binario. Per ulteriori informazioni, vedere BULK INSERT (Transact-SQL).

    Nota Viene generato un errore di sintassi se non viene fornito un elenco di colonne.

Procedure consigliate

Utilizzare la funzione @@ROWCOUNT per restituire il numero di righe inserito al client. Per ulteriori informazioni, vedere @@ROWCOUNT (Transact-SQL).

Procedure consigliate per l'importazione bulk di dati

Utilizzo di INSERT INTO...SELECT per eseguire l'importazione bulk dei dati con registrazione minima

È possibile utilizzare INSERT INTO <tabella_destinazione> SELECT <colonne> FROM <tabella_origine> per trasferire in modo efficiente un numero elevato di righe da una tabella, quale una tabella di gestione temporanea, in un'altra tabella con registrazione minima. La registrazione minima può migliorare le prestazioni dell'istruzione e ridurre la possibilità che l'operazione riempia lo spazio del log delle transazioni disponibile durante la transazione.

Per utilizzare la registrazione minima con questa istruzione, sono necessari i requisiti seguenti:

  • Il modello di recupero del database deve essere impostato sul modello con registrazione minima o con registrazione minima delle operazioni bulk.

  • La tabella di destinazione deve essere un heap vuoto o non vuoto.

  • La tabella di destinazione non deve essere utilizzata nella replica.

  • L'hint TABLOCK deve essere specificato per la tabella di destinazione.

Per le righe inserite in un heap come risultato di un'azione di inserimento in un'istruzione MERGE può essere eseguita la registrazione minima.

A differenza dell'istruzione BULK INSERT, che contiene un blocco di aggiornamento bulk meno restrittivo, l'istruzione INSERT INTO…SELECT con l'hint TABLOCK contiene un blocco esclusivo (X) sulla tabella che non consente di inserire righe utilizzando operazioni di inserimento parallele. Per ulteriori informazioni sui blocchi, vedere Modalità blocco.

Utilizzo di OPENROWSET e BULK per l'importazione bulk dei dati

La funzione OPENROWSET può accettare gli hint di tabella seguenti i quali supportano le ottimizzazioni per il caricamento bulk con l'istruzione INSERT:

  • L'hint TABLOCK può ridurre al minimo il numero di record del log per l'operazione di inserimento. Per il database è necessario impostare il modello di recupero con registrazione minima o con registrazione minima delle operazioni bulk. La tabella di destinazione non può inoltre essere utilizzata nella replica. Per ulteriori informazioni, vedere Prerequisiti per la registrazione minima nell'importazione bulk.

  • Il controllo dei vincoli FOREIGN KEY e CHECK può essere disabilitato temporaneamente specificando l'hint IGNORE_CONSTRAINTS.

  • L'esecuzione dei trigger può essere disabilitata temporaneamente specificando l'hint IGNORE_TRIGGERS.

  • L'hint KEEPDEFAULTS consente l'inserimento del valore predefinito di una colonna di tabella, se disponibile, al posto del valore NULL quando nel record di dati non è presente un valore per la colonna.

  • L'hint KEEPIDENTITY consente l'utilizzo dei valori Identity presenti nel file di dati importato per la colonna Identity nella tabella di destinazione.

Queste ottimizzazioni sono simili a quelle disponibili con il comando BULK INSERT. Per ulteriori informazioni, vedere Hint di tabella (Transact-SQL).

Tipi di dati

Quando si inseriscono righe, considerare il comportamento dei tipi di dati seguenti:

  • Se un valore viene caricato in colonne di tipo char, varchar o varbinary, il riempimento o il troncamento degli spazi vuoti finali (spazi per i tipi di dati char e varchar, zero per varbinary) viene determinato dall'impostazione SET ANSI_PADDING definita per la colonna alla creazione della tabella. Per ulteriori informazioni, vedere SET ANSI_PADDING (Transact-SQL).

    Nella tabella seguente vengono descritte le operazioni predefinite per SET ANSI_PADDING OFF.

    Tipo di dati

    Operazione predefinita

    char

    Il valore viene riempito con spazi fino alla larghezza di colonna specificata.

    varchar

    Gli spazi finali vengono rimossi fino all'ultimo carattere diverso dallo spazio o fino al carattere di spazio singolo per le stringhe composte da soli spazi.

    varbinary

    Gli zero finali vengono rimossi.

  • Se una stringa vuota (' ') viene caricata in una colonna di tipo varchar o text, l'operazione predefinita prevede il caricamento di una stringa di lunghezza zero.

  • L'inserimento di un valore Null in una colonna di tipo text o image non consente di creare un puntatore di testo valido né di preallocare una pagina di testo da 8 KB. Per ulteriori informazioni sull'inserimento di dati di tipo text e image, vedere Utilizzo delle funzioni text, ntext e image.

  • Nelle colonne di tipo uniqueidentifier vengono archiviati valori binari a 16 byte con una formattazione speciale. Diversamente dalle colonne Identity, il Motore di database non genera automaticamente valori per le colonne di tipo uniqueidentifier. Durante un'operazione di inserimento è possibile utilizzare variabili di tipo uniqueidentifier e costanti stringa nel formato xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 caratteri inclusi i segni meno, dove x è una cifra esadecimale compresa nell'intervallo 0-9 o a-f) per le colonne di tipo uniqueidentifier. 6F9619FF-8B86-D011-B42D-00C04FC964FF, ad esempio, è un valore valido per una variabile o una colonna di tipo uniqueidentifier. Per ottenere un ID univoco globale (GUID), utilizzare la funzione NEWID().

Inserimento di valori in colonne di tipo definito dall'utente

Per inserire valori in colonne di tipo definito dall'utente è possibile effettuare una delle operazioni indicate di seguito:

  • Specificare un valore del tipo definito dall'utente.

  • Specificare un valore in un tipo di dati di sistema di SQL Server, a condizione che il tipo definito dall'utente supporti la conversione implicita o esplicita da tale tipo. Nell'esempio seguente viene illustrato come inserire un valore in una colonna con il tipo definito dall'utente Point, tramite conversione esplicita da una stringa.

    INSERT INTO Cities (Location)
    VALUES ( CONVERT(Point, '12.3:46.2') );
    

    È inoltre possibile specificare un valore binario senza eseguirne la conversione esplicita, perché tutti i tipi definiti dall'utente possono essere convertiti in modo implicito dal tipo binario. Per ulteriori informazioni sulla conversione e i tipi definiti dall'utente, vedere Esecuzione di operazioni su tipi definiti dall'utente.

  • Chiamare una funzione definita dall'utente che restituisce un valore con il tipo definito dall'utente. Nell'esempio seguente viene utilizzata la funzione definita dall'utente CreateNewPoint() per creare un nuovo valore con il tipo definito dall'utente Point e inserire tale valore nella tabella Cities.

    INSERT INTO Cities (Location)
    VALUES ( dbo.CreateNewPoint(x, y) );
    

Gestione degli errori

È possibile implementare la gestione degli errori per l'istruzione INSERT specificando l'istruzione in un costrutto TRY…CATCH. Per ulteriori informazioni, vedere Utilizzo di TRY...CATCH in Transact-SQL.

Se un'istruzione INSERT viola un vincolo o una regola oppure il valore non è compatibile con il tipo di dati della colonna, l'istruzione ha esito negativo e viene restituito un messaggio di errore.

Se l'istruzione INSERT carica più righe tramite SELECT o EXECUTE e i valori caricati violano una regola o un vincolo, l'istruzione viene arrestata e non viene caricata alcuna riga.

Quando un'istruzione INSERT rileva un errore aritmetico (overflow, divisione per zero o errore di dominio) durante la valutazione di un'espressione, l'errore viene gestito dal Motore di database come se l'opzione SET ARITHABORT fosse impostata su ON. Il batch viene arrestato e viene restituito un messaggio di errore. Quando un'istruzione INSERT, DELETE o UPDATE rileva un errore aritmetico (un errore di overflow, una divisione per zero o un errore di dominio) durante la valutazione di un'espressione, se SET ARITHABORT e SET ANSI_WARNINGS sono impostate su ON, SQL Server inserisce o aggiorna un valore Null. Se la colonna di destinazione non ammette valori Null, l'azione di inserimento o aggiornamento ha esito negativo e viene generato un errore per l'utente. Per ulteriori informazioni, vedere Comportamento con le opzioni ARITHABORT e ARITHIGNORE impostate su ON.

Interoperabilità

Se viene definito un trigger INSTEAD OF nelle azioni INSERT eseguite su una tabella o vista, viene eseguito il trigger anziché l'istruzione INSERT. Per ulteriori informazioni sui trigger INSTEAD OF, vedere CREATE TRIGGER (Transact-SQL).

Limitazioni e restrizioni

Se si esegue l'inserimento di valori in tabelle remote e non vengono specificati tutti i valori per tutte le colonne, è necessario identificare le colonne in cui devono essere inseriti i valori specificati.

L'impostazione dell'opzione SET ROWCOUNT viene ignorata per istruzioni INSERT eseguite su viste partizionate locali e remote. Inoltre, questa opzione non è supportata per istruzioni INSERT eseguite su tabelle remote.

Nota importanteImportante

L'utilizzo di SET ROWCOUNT non avrà effetto sulle istruzioni DELETE, INSERT e UPDATE in una versione futura di SQL Server. Non utilizzare SET ROWCOUNT con le istruzioni DELETE, INSERT e UPDATE in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È consigliabile utilizzare la clausola TOP in alternativa.

Comportamento di blocco

Un'istruzione INSERT acquisisce sempre un blocco esclusivo (X) sulla tabella che modifica e mantiene tale blocco fino al completamento della transazione. In presenza di un blocco esclusivo (X), nessun'altra transazione può modificare i dati. Le operazioni di lettura possono essere eseguite solo utilizzando l'hint NOLOCK o il livello di isolamento Read Uncommitted. Per ulteriori informazioni, vedere Utilizzo dei blocchi in Motore di database.

Comportamento di registrazione

L'istruzione INSERT è sempre completamente registrata tranne quando si utilizza la funzione OPENROWSET con la parola chiave BULK o quando si utilizza l'istruzione INSERT INTO <tabella_destinazione> SELECT <colonne> FROM <tabella_origine>. Per queste operazioni è possibile eseguire la registrazione minima. Per ulteriori informazioni, vedere la sezione "Procedure consigliate per il caricamento bulk dei dati" più indietro in questo argomento.

Sicurezza

Durante una connessione a un server collegato, il server mittente fornisce un nome di account di accesso e una password per connettersi al server ricevente per suo conto. Per far funzionare la connessione, è necessario creare un mapping dell'account di accesso tra i server collegati utilizzando sp_addlinkedsrvlogin. Per ulteriori informazioni, vedere Sicurezza per i server collegati.

Quando si utilizza OPENROWSET(BULK…), è essenziale comprendere il modo in cui la rappresentazione viene gestita da SQL Server. Per ulteriori informazioni, vedere "Considerazioni sulla sicurezza" in Importazione di dati per operazioni bulk utilizzando BULK INSERT o OPENROWSET(BULK...).

Autorizzazioni

È richiesta l'autorizzazione INSERT per la tabella di destinazione.

Le autorizzazioni INSERT vengono concesse per impostazione predefinita ai membri del ruolo predefinito del server sysadmin, ai membri dei ruoli predefiniti del database db_owner e db_datawriter al proprietario della tabella. I membri dei ruoli sysadmin, db_owner e db_securityadmin e il proprietario della tabella possono trasferire le autorizzazioni ad altri utenti.

Per eseguire INSERT con l'opzione BULK per la funzione OPENROWSET, è necessario essere un membro del ruolo predefinito del server sysadmin o bulkadmin.

Esempi

Per alcuni esempi, vedere Esempi di istruzioni INSERT (Transact-SQL).