
[英]Ad hoc updates to system catalogs are not allowed in SQL Server 2012
[英]How do you get past this sort of error: “Ad hoc updates to system catalogs are not allowed.”?
进行以下输入:
update sys.assemblies set permission_set_desc = 'EXTERNAL_ACCESS' where
assembly_id = <someInt> and name not like 'microsoft%'
和以下输出:
Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.
这是在SQL Server 2012中。我以“ sa”身份登录,因此这可能不是用户权限问题。 我在Google上找到的链接没有解决方案,或者我很难遵循。 在不对数据库进行不必要的永久更改的情况下,如何克服这一问题? 谢谢!
编辑
抱歉,我不小心从错误的窗口复制并粘贴了输入和输出。 我删除了我真正遇到的麻烦,因此无法找到它的实质。 第一条评论修复了我遇到的任何麻烦。 我不记得现在到底是什么了,但是我很快就会从一件事转到另一件事……如果我以后记得我在看什么,我会解决问题,但我会继续处理现在的问题是。
您无法更新系统目录,就像错误消息中所说的一样。 自SQL Server 2000以来,您一直无法做到这一点,即使在那个牛仔时代,这也不是一个好主意。 就像Gordon所说的那样,您需要执行的方法是使用ALTER ASSEMBLY
。 如果您只有一个要更新的程序集:
ALTER ASSEMBLY [assembly name] WITH PERMISSION_SET = EXTERNAL_ACCESS;
如果有多个,则可以使用动态SQL生成脚本:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'ALTER ASSEMBLY ' + QUOTENAME(name)
+ ' WITH PERMISSION_SET = EXTERNAL_ACCESS;
'
FROM sys.assemblies WHERE assembly_id = <someInt>; -- or IN (<some range>)
PRINT @sql;
-- EXEC sp_executesql @sql;
我认为如果提供了特定的assembly_id
则无需过滤掉Microsoft程序assembly_id
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.