数据库受到编辑保护?

时间:2013-01-28 03:55:39

标签: sql sql-server ssms

如果我在SQL Server Management Studio的底部看到这个,这是否意味着我没有编辑行的权限?

enter image description here

3 个答案:

答案 0 :(得分:4)

或者该列是计算列,或由IDENTITY属性填充,或ROWVERSION,或...

尝试编辑此表中的数据,您将看到所有三列都是只读的:

USE tempdb;
GO

CREATE TABLE dbo.flub
(
  i INT IDENTITY(1,1),
  x AS (i + 1),
  r ROWVERSION
);
INSERT dbo.flub DEFAULT VALUES;

如果您分享表的定义,我们至少可以告诉您为什么如果是因为其中一个原因(我们需要更多信息来确认它是否是列级权限问题)。

更好的建议:停止使用“打开表”,“编辑前200行”或任何其他Excel外观网格来修改数据。使用UPDATE语句编写正确的DML - 我向您保证,当您尝试修改一个在几乎所有情况下都不会更具描述性的值时,您会收到错误消息。上面的例子:

UPDATE dbo.flub SET i = 5;
  

Msg 8102,Level 16,State 1,Line 1   
无法更新标识栏'i'。

UPDATE dbo.flub SET x = 5;
  

Msg 271,Level 16,State 1,Line 1   
无法修改“x”列,因为它是计算列或是UNION运算符的结果。

UPDATE dbo.flub SET r = 0x00;
  

Msg 272,Level 16,State 1,Line 1   
无法更新时间戳列。

I talk about several bugs in these UIs here,其他人已被报道过。 This one, for example, was just fixed in the 2012 version...

答案 1 :(得分:0)

如果您只是在表中的一列或多列上获取该消息,则听起来该单元格可能是计算列,根据定义,它不支持更新。或者,它可能是一个不支持更新的标识列。

要查看它是否为计算列:如果您转到表设计器,您将注意到没有指定数据类型,而是(在下面的属性中)计算列规范。或者,在DDL中,您将看到该列的AS子句。

答案 2 :(得分:0)

如果您当前尝试编辑的列是IDENTITY列,则会显示此消息。