2010-04-15 14 views

risposta

22

vedi Using Views in Microsoft SQL Server

Quando la modifica dei dati tramite una vista (cioè, utilizzando INSERT o UPDATE dichiarazioni) esistono alcune limitazioni a seconda del tipo di vista. Le viste che l'accesso a più tabelle possono solo modificare una delle tabelle nella vista. Vista che utilizzano le funzioni, specificano DISTINCT, o utilizzare la clausola GROUP BY potrebbe non essere aggiornato. Inoltre, l'inserimento dei dati è proibito per i seguenti tipi di visite:

* views having columns with derived (i.e., computed) data in the SELECT-list 
* views that do not contain all columns defined as NOT NULL from the tables from which they were defined 

È anche possibile inserire o aggiornare i dati tramite una vista tale che i dati non è più accessibile tramite che vista, a meno che non sia stata specificata l'opzione WITH CHECK .

+0

Ci sono così tanti avvertimenti sull'inserimento tramite una vista, che io personalmente trovo più semplice da inserire direttamente ai tavoli. Dopotutto, devi ancora cercare quali campi andare a quale tabella per rispettare le regole e se sai che non c'è motivo per non aggiornare o inserire direttamente la tabella. – HLGEM

+0

Non ho mai fatto un UPDATE o INSERT su una vista, ma potrebbe essere vantaggioso se si dispone di una vista indicizzata che è possibile utilizzare per individuare rapidamente le righe che richiedono la modifica. In tal caso, costruirò la vista al solo scopo dell'aggiornamento. –

12

Sì.

I dati "in" per una vista non esistenza indipendente dalle tabelle che compongono la vista. La vista è, in sostanza, un'istruzione SELECT memorizzata che si maschera come una tabella. I dati vengono archiviati nelle tabelle originali e solo "assemblati" nella vista quando si desidera visualizzarli. Se la vista è aggiornabile (non tutte le viste sono) gli aggiornamenti vengono applicati ai dati della tabella.

+0

Capisco il tuo punto. Ma sorge una nuova domanda, se la vista è solo un'istruzione selezionata, quindi Come gli indici vengono mantenuti su una vista. Tutti gli indici vengono ricostruiti non appena qualcuno interroga una vista. –

+1

Non ci sono indici sulle viste, solo sulle tabelle sottostanti. Gli indici vengono utilizzati dal DBMS per assemblare le righe delle diverse tabelle quando si richiedono dati dalla vista. (Questo ignora un tipo di vista abbastanza nuovo, la "vista materializzata" in cui il database memorizza una copia "shadow" dei dati, pre-calcolando in modo efficace la vista per te). –

5

Si potrebbe utilizzare un trigger sulla vista di fare un inserimento/aggiornamento/cancellare le tabelle attuali.

http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/1/

+4

Apprezzo il feedback sulla mia risposta, ma se è negativo, perché nessuno commenta? Mi piacerebbe essere corretto se sbaglio. –

+4

La domanda chiede esplicitamente gli effetti dell'aggiornamento di una vista. Proporre alternative è grande e tutto, ma non risponde alla domanda. – Dan

Problemi correlati