Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中使表只读?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

如何在SQL Server中使表只读?

如何在SQL Server中使表只读?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我正在更新该表中的一些记录集,之后我需要将该表设置为只读 那么如何在SQL Server中使表只读呢?这是一种简单的替代方法,可以阻止对特定表的更新和插入,但仍然允许删除: ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 ) 注意:这避免了插入和更新,但允许删除 如果您确实需要一个真正只读的表,您也可以: a) 将其放入自己的数据库或 b) 将其放在文件组中,并将其标记为只读,如下所示: US

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


那么如何在SQL Server中使表只读呢?

这是一种简单的替代方法,可以阻止对特定表的更新和插入,但仍然允许删除:

ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 )
注意:这避免了插入和更新,但允许删除

如果您确实需要一个真正只读的表,您也可以:

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
有关此主题的更多详细信息,请访问此处:


< p>如果您希望它只对一般公众阅读,但仍希望能够在稍后的日期编辑该表,您可能需要考虑为该数据库创建多个用户并授予该数据库的不同权限。截断等

  • 带回滚事务的触发器
  • 只读文件组
  • 不授予插入/更新/删除权限

  • 第三条可能是最佳实践。例如,如果您的连接是db_owner,那么可以禁用触发器,也可以将表移动到其他文件组。

    这里有几个不错的答案。我的问题是:对于谁,表必须是只读的?系统管理员总是有能力做任何事情,尽管这可能需要他们的时间和精力。除了系统管理员之外,用户一直在努力改进这个答案,但我的编辑被拒绝了。请添加缺少的代码以了解如何使文件组只读:
    ALTER DATABASE[csvtosp]MODIFY filegroup[READONLYTABLES]readonly
    1。文件组
    READONLYTABLES
    不是只读2。无需删除表即可将其移动到另一个文件组。您只需要重新创建聚集索引。