2010-10-05 25 views
12

Una domanda sulla aggiornabili vista DB: sto leggendo attraverso alcuni documentazione MSDN su questo argomento, e ho incontrato la seguente limitazione:viste aggiornabili - SQL Server 2008

eventuali modifiche, tra cui UPDATE, INSERT, e DELETE, devono fare riferimento alle colonne da una sola tabella di base.

Voglio solo essere sicuro di capire la restrizione. Mi piacerebbe utilizzare le visualizzazioni in un paio di miei progetti di revisione dei media. I dati relazionali sono distribuiti su tutte le tabelle, ma una vista sembra essere il modo migliore per essere in grado di consolidare i dati di cui ho bisogno da più tabelle (alcune delle quali sono collegate tramite chiavi esterne) in una posizione centralizzata. Poiché le colonne verrebbero da una varietà di tabelle, significa che non posso eseguire una coperta INSERT o UPDATE per mantenere le modifiche in tutte le colonne?

risposta

11

Sì, questo è ciò che significa. Non vedo alcun vantaggio per l'aggiornamento attraverso una vista poiché è necessario sapere quali sono le tabelle di base coinvolte.

+0

Beh, se voglio modificare informazioni è più facile per popolare i campi del modulo con i valori della vista e salvarli di nuovo allo stesso modo. –

+0

Finché la vista contiene le colonne chiave della tabella sottostante o consente in altro modo a SQL Server di identificare in modo univoco una riga nella tabella, l'aggiornamento diretto tramite una vista può semplificare le cose ora, soprattutto in situazioni come quelle in cui una vista è mappata a una forma o un datagrid. Questo mi ha preoccupato un po 'all'inizio, ma poiché l'utente ha ancora bisogno di diritti per aggiornare la tabella in ogni caso, non ci sono ulteriori rischi per la sicurezza. – SqlRyan

+2

Ma non funzionerà se i campi aggiornati provengono da diverse tabelle sottostanti. Ecco perché non è utile aggiornare da una vista. – HLGEM

12

È possibile utilizzare un trigger INSTEAD OF su una vista per mantenere l'applicazione interessata solo dalla vista anziché dalla raccolta di tabelle di base dei riferimenti della vista.

Ecco un esempio: Designing INSTEAD OF Triggers

Problemi correlati