2010-03-27 25 views
19

Sto aggiornando alcuni set di record in quella tabella, dopo di che ho bisogno di fare questa tabella di sola lettura.Come creare una tabella di sola lettura in SQL Server?

Quindi, come creare una tabella di sola lettura in SQL Server?

+0

Diverse buone risposte qui. La mia domanda è: per chi il tavolo deve essere di sola lettura? Gli amministratori di sistema hanno sempre il potere di fare qualsiasi cosa, anche se potrebbe richiedere tempo e fatica. –

+1

diverso dagli utenti di amministrazione di sistema – Jeyavel

risposta

29

Una semplice alternativa che potrebbe bloccare l'aggiornamento e inserire su una tabella specifica, ma consentendo comunque cancellare:

ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK(1 = 0) 

essere consapevoli: questo evita inserimenti e aggiornamenti, ma permette DELETE.

Se davvero bisogno di una tabella per essere veramente sola lettura si potrebbe anche uno:

a) metterlo nel proprio database o
b) mettere su un gruppo di file e Mark che di sola lettura, ecco come:

USE [master] 

GO 

ALTER DATABASE [csvtosp] ADD FILEGROUP [READONLYTABLES] 

GO 

ALTER DATABASE [csvtosp] ADD FILE (NAME = N'mydb_readonly_tables', FILENAME = N'G:\SQL2005DATA\mydb_readonly_tables.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB) TO FILEGROUP [READONLYTABLES] 

GO 

USE csvtosp 

GO 

DROP TABLE mytable 

CREATE TABLE mytable (

    somedata char(8000) not null 

) ON READONLYTABLES 

GO 

Per ulteriori dettagli su questo argomento, andate qui:

How to make a table Read Only in SQL Server

+2

Tentativo di migliorare questa risposta, ma la mia modifica è stata respinta. Aggiungi il codice mancante per come creare un filegroup di sola lettura: 'ALTER DATABASE [csvtosp] MODIFY FILEGROUP [READONLYTABLES] READONLY' – Baodad

+0

1. Filegroup' READONLYTABLES' non è READONLY 2. Non è necessario rilasciare la tabella per spostarla in un altro filegroup . Hai solo bisogno di ricreare l'indice cluster. –

2

Se si desidera leggerlo solo per il pubblico generale, ma si desidera comunque poter modificare la tabella in un secondo momento, è consigliabile prendere in considerazione la creazione di più utenti per il database e la concessione di autorizzazioni diverse a tale database - idealmente si dovrebbe fare questo in ogni caso e non consentire l'accesso pubblico ad alterare tavolo, troncare ecc

7
  1. trigger con rollback trans
  2. Leggi solo filegroup
  3. non concedono inserimento/aggiornamento/cancellare i permessi

Il numero 3 è probabilmente la migliore pratica. Ad esempio, se la tua connessione è db_owner per esempio, il trigger può essere disabilitato il trigger o spostare comunque la tabella in un filegroup diverso.

Problemi correlati