SQL Server 2012 中不允许对系统目录进行临时更新
Posted
技术标签:
【中文标题】SQL Server 2012 中不允许对系统目录进行临时更新【英文标题】:Ad hoc updates to system catalogs are not allowed in SQL Server 2012 【发布时间】:2015-12-17 13:44:24 【问题描述】:我想通过像这样更新它来从列中删除身份..
sp_configure 'allow update', 1
go
reconfigure with override
go
update sys.syscolumns
set colstat = 0 -- turn off bit 1 which indicates identity column
where id = object_id('tbl1') and name = 'ids'
go
sp_configure 'allow updates', 0
go
reconfigure
go
我遇到了这个错误,尝试了很多次。
消息 259,第 16 级,状态 1,第 15 行 不允许对系统目录进行临时更新。
【问题讨论】:
这里有很多建议的解决方案:google.com/… 嗯 - 错误非常清楚地说明了一切:不允许更新系统目录 - 这些是系统级目录视图 - 你没有业务在其中摆弄并尝试更新内容-这些视图反映了您系统的实际情况-如果您想更改某些内容-在相应的数据库对象中更改它(此处:tbl1
)-不在系统目录中查看!
说真的,这样做可能会破坏某些东西。只需drop and recreate the table。
我想以任何方式执行此操作,我只是想从列中删除身份属性。
【参考方案1】:
如果你想完全摆脱它,只需重命名表,然后将数据转储到新表中。
EXEC sp_rename 'OriginalTblName','OLD_OriginalTblName'
CREATE TABLE OriginalTblName (Definition of your Table)
INSERT OriginalTblName
SELECT * FROM OLD_OriginalTblName
如果您愿意,只需将内容选择到新表中即可跳过CREATE TABLE
步骤。您无法使用此方法以您想要的方式定义字段。
SELECT * FROM OLD_OriginalTblName
INTO OriginalTblName
如果你只是想INSERT
新记录,你可以使用IDENTITY INSERT
插入你想要的记录。请注意不要重复这些值,否则您会破坏表格。
SET IDENTITY_INSERT ON OriginalTblName
INSERT OriginalTblName
SELECT someFields
FROM someTbl
SET IDENTITY_INSERT OFF OriginalTblName
IDENTITY INSERT
不适用于 UPDATE
字段上的 IDENTITY
。您需要使用上述方法之一捕获数据并重新插入记录。
【讨论】:
以上是关于SQL Server 2012 中不允许对系统目录进行临时更新的主要内容,如果未能解决你的问题,请参考以下文章
Ctrl R 在 SQL Server 2012 中不起作用
SQL Server 2012允许远程连接(Windows Server 2016)
vCenter 6.5U1 Windows SQL Server 2012 安装