你是如何克服这种错误的:“不允许对系统目录进行临时更新。”?

时间:2014-01-17 15:23:20

标签: sql sql-server sql-server-2012

采取以下输入:

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”身份登录,因此这可能不是用户权限问题。我在谷歌上找到的链接要么没有解决方案,要么我很难遵循。如何在不对数据库进行必要的永久性更改的情况下解决此问题?谢谢!

修改

抱歉,我不小心从错误的窗口复制并粘贴了输入和输出。我删除了我真正遇到的问题,所以我无法找到它的内容。第一条评论解决了我遇到麻烦的问题。我不记得现在到底是什么,但是我很快就从一件事转到另一件事......如果我记得我后来看到的东西,我会解决这个问题,但我会继续处理现在这个问题。

1 个答案:

答案 0 :(得分:5)

您无法更新系统目录,就像错误消息所述。自从SQL Server 2000以来,你无法做到这一点,甚至回到那些牛仔时代,它也不是一个好主意。像戈登所说,你需要这样做的方法是使用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程序集。