我正在更新该表中的一些记录集,之后我需要将此表只读。
那么如何在SQL Server中创建一个只读表?
答案 0 :(得分:34)
一种简单的替代方法,可阻止更新并插入特定表但仍允许删除:
ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 )
请注意:这可以避免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
有关此主题的更多详情,请访问:
答案 1 :(得分:8)
3号可能是最好的做法。例如,如果你的连接是db_owner,那么触发器可以被禁用触发器或者将表移动到另一个文件组。
答案 2 :(得分:3)
如果您希望它只读给普通大众,但仍希望能够在以后编辑该表,您可能需要考虑为数据库创建多个用户并为该数据库授予不同的权限 - 理想情况下无论如何你应该这样做,不允许一般公众访问alter table,truncate等。