如何在SQL Server中创建只读表?

Jey*_*vel 22 sql sql-server sql-server-2005

我正在更新该表中的一些记录集,之后我需要将此表只读.

那么如何在SQL Server中创建一个只读表?

Len*_*rri 34

一个简单的替代方法,可阻止更新并插入特定表但仍允许删除:

ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 )
Run Code Online (Sandbox Code Playgroud)

请注意:这可以避免INSERT和UPDATE,但允许DELETE.

如果你真的需要一张桌子才能真正阅读,你也可以:

a)将它放在自己的数据库中或
b)将它放在一个文件组上并标记为只读,这是如何:

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
Run Code Online (Sandbox Code Playgroud)

有关此主题的更多详细信息,请访问:

如何在SQL Server中使表只读

  • 试图改进这个答案,但我的编辑被拒绝了.请添加缺少如何使文件组只读的代码:`ALTER DATABASE [csvtosp] MODIFY FILEGROUP [READONLYTABLES] READONLY` (4认同)

gbn*_*gbn 9

  1. 使用rollback trans触发
  2. 只读文件组
  3. 不授予插入/更新/删除权限

3号可能是最好的做法.例如,如果您的连接是db_owner,那么触发器可以被禁用触发器或者将表移动到另一个文件组.