如果我在SQL Server Management Studio的底部看到这个,这是否意味着我没有编辑行的权限?
答案 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列,则会显示此消息。