Condividi tramite


Modifica di dati nelle viste partizionate

Se una vista partizionata non è aggiornabile, può fungere solo da copia in sola lettura della tabella originale. Una vista partizionata aggiornabile può includere tutte le caratteristiche della tabella originale.

Un vista è considerata una vista partizionata aggiornabile se rappresenta un set di istruzioni SELECT i cui singoli set di risultati sono combinati in uno tramite l'istruzione UNION ALL. Ogni istruzione SELECT fa riferimento a una tabella di base di SQL Server. La tabella può essere una tabella locale o una tabella collegata a cui si fa riferimento utilizzando un nome in quattro parti, la funzione OPENROWSET o la funzione OPENDATASOURCE. Non è possibile utilizzare una funzione OPENDATASOURCE o OPENROWSET che specifichi una query pass-through.

Le istruzioni di modifica dei dati che fanno riferimento alla vista devono inoltre rispettare le regole definite per le istruzioni INSERT, UPDATE e DELETE.

[!NOTA]

L'importazione bulk in una vista partizionata non è supportata dal comando bcp o dalle istruzioni BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...). È tuttavia possibile inserire più righe in una vista partizionata utilizzando un'istruzione INSERT.

Se la vista partizionata viene distribuita tra server, evitare l'utilizzo di trigger o operazioni di propagazione nelle tabelle di base. In caso contrario, è possibile che vengano apportate modifiche ai dati sottostanti che possono influire sulla definizione della vista.

Le viste partizionate distribuite possono essere aggiornate solo se l'utente dispone dell'autorizzazione CONTROL, ALTER, TAKE OWNERSHIP o VIEW DEFINITION su tutte le tabelle sottostanti. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi alla visibilità dei metadati delle viste partizionate distribuite.

[!NOTA]

È possibile modificare i dati tramite una vista partizionata distribuita solo se si installa SQL Server 2008 Enterprise Edition o SQL Server 2008 Developer Edition. È tuttavia possibile modificare dati tramite una vista partizionata locale in qualsiasi edizione di SQL Server 2008.

Istruzioni INSERT

Le istruzioni INSERT consentono di aggiungere dati alle tabelle membro tramite la vista partizionata e devono rispettare le regole seguenti:

  • Tutte le colonne devono essere incluse nell'istruzione INSERT anche se la colonna può essere NULL nella tabella di base o include un vincolo DEFAULT definito nella tabella di base.

  • La parola chiave DEFAULT non può essere specificata nella clausola VALUES dell'istruzione INSERT.

  • Le istruzioni INSERT devono fornire un valore che soddisfi la logica del vincolo CHECK definito nella colonna di partizionamento per una delle tabelle membro.

  • Le istruzioni INSERT non sono consentite se una tabella membro contiene una colonna con una proprietà Identity.

  • Le istruzioni INSERT non sono consentite se una tabella membro contiene una colonna timestamp.

  • Le istruzioni INSERT non sono consentite se è presente un self join con la stessa vista o una qualsiasi delle tabelle membro.

Istruzioni UPDATE

Le istruzioni UPDATE consentono di modificare dati in una o più tabelle membro tramite la vista partizionata e devono rispettare le regole seguenti:

  • Nelle istruzioni UPDATE non è possibile specificare la parola chiave DEFAULT come valore nella clausola SET, anche se alla colonna è associato un valore DEFAULT definito nella tabella membro corrispondente.

  • Il valore di una colonna con una proprietà Identity non può essere modificato. È tuttavia possibile aggiornare le altre colonne.

  • Non è possibile modificare il valore di un vincolo PRIMARY KEY se la colonna contiene dati di tipo text, image o ntext.

  • Gli aggiornamenti non sono consentiti se una tabella di base contiene una colonna timestamp.

  • Gli aggiornamenti non sono consentiti se è presente un self join con la stessa vista o una qualsiasi delle tabelle membro.

Istruzioni DELETE

Le istruzioni DELETE consentono di rimuovere dati in una o più tabelle membro tramite la vista partizionata. Le istruzioni DELETE non sono consentite se è presente un self join con la stessa vista o una qualsiasi delle tabelle membro.