在sql server中使行不可更改

时间:2014-05-21 16:50:50

标签: sql sql-server-2008 rows

真的只是一个简单的问题..想象一下,你有一个包含数据的表,你需要每月更新一次,然后保存。之后,您的数据库应禁止对受影响的行进行任何其他更改,但保留它们。大概永远不会删除那些行。

我如何以良好的方式实现这一目标?

谢谢!

4 个答案:

答案 0 :(得分:1)

从所有普通用户撤消对表的更新/插入/删除

答案 1 :(得分:0)

使用TRIGGER可以实现这样的复杂约束。但请谨慎使用,因为它们可能会变成维护噩梦。

答案 2 :(得分:0)

使用"查看"作为表格的一部分,除了你提到保护的那一行。也许是动态的观点。所以人们无法改变他们看不到的那一行。

答案 3 :(得分:0)

另一个解决方案:read only filegroups

ALTER DATABASE Test
MODIFY FILEGROUP [FG2] READ_ONLY;

示例:

CREATE DATABASE Test;
GO
ALTER DATABASE Test ADD FILEGROUP FG2
GO
ALTER DATABASE Test ADD FILE 
(
    NAME = 'SecondFile',
    FILENAME = 'D:\BD\SecondFile.ndf'
) TO FILEGROUP FG2;
GO
CREATE TABLE dbo.MyTable2 (Col1 INT) ON FG2;
INSERT dbo.MyTable2 VALUES (11);
GO
ALTER DATABASE Test
MODIFY FILEGROUP [FG2] READ_ONLY;
GO
INSERT dbo.MyTable2 VALUES (22);
GO
/*
Msg 652, Level 16, State 1, Line 1
The index "" for table "dbo.MyTable2" (RowsetId 72057594060210176) resides on a read-only filegroup ("FG2"), which cannot be modified.
*/