如果我在 SQL Server Management Studio 的底部看到这个,这是否意味着我没有编辑行的权限?
3 回答
或者该列是计算列,或者由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 的网格来修改数据。使用语句编写正确的 DML UPDATE
- 我向您保证,当您尝试修改无法修改的值时,您收到的错误消息几乎在每种情况下都会更具描述性。上面的例子:
UPDATE dbo.flub SET i = 5;
消息 8102,级别 16,状态 1,第 1 行
无法更新标识列“i”。
UPDATE dbo.flub SET x = 5;
消息 271,级别 16,状态 1,第 1 行
无法修改列“x”,因为它是计算列或 UNION 运算符的结果。
UPDATE dbo.flub SET r = 0x00;
消息 272,级别 16,状态 1,行 1
无法更新时间戳列。
我在这里讨论了这些 UI 中的几个错误,此后也报告了其他错误。例如,这个在 2012 版本中刚刚修复...
如果您只在表中的一个或多个列上收到该消息,那么听起来该单元格可能是一个计算列,根据定义,它不支持更新。或者,它可能是一个也不支持更新的标识列。
要查看它是否是计算列:如果您转到表设计器,您会注意到没有指定数据类型,而是(在下面的属性中)一个计算列规范。或者,在 DDL 中,您将看到AS
该列的子句。
如果您当前尝试编辑的该列是 IDENTITY 列,它将显示此消息。