【问题标题】:SQL Server - applying a role to a user. "select failed because the following set options quoted_identifier"SQL Server - 将角色应用于用户。 “选择失败,因为以下设置选项quoted_identifier”
【发布时间】:2018-05-28 12:58:14
【问题描述】:

我已将一个大型数据库从另一台机器恢复到我的本地机器。并重新创建了相同的用户帐户。但是当我尝试应用 db_datareader 或 db_datawriter 我得到 “SELECT 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或过滤索引和/或查询规范”

我可以把这个用户的角色分配给其他数据库。 我没有任何索引视图。也许它是计算列上的索引。

我怎样才能找到它?

【问题讨论】:

  • 您是说在将用户添加到内置数据库角色时从 SSMS 中获取错误,还是在用户执行查询时?您是否使用了备份/恢复?我希望这能保留所有原始数据库设置。过滤索引也需要 ANSI 设置,但我不确定它是如何发挥作用的。
  • 尝试申请角色时来自 SMSS。我做了备份/恢复
  • T-SQL ALTER ROLE...ADD MEMBER 是否也出现同样的错误?
  • 2008 年使用 sp_addrolemember 'db_datareader', 'myusername' Msg 1934, Level 16, State 1, Procedure rds_deny_backups_trigger, Line 14 [Batch Start Line 10] SELECT 失败,因为以下 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。
  • 您的 SSMS 查询窗口会话是否启用了 QUOTED_IDENTIFIER?我在您的问题中添加了 SQL 2008 标记。

标签: sql-server sql-server-2008


【解决方案1】:

似乎sp_addrolemember 触发了具有QUOTED_IDENTIFIER OFF 的服务器触发器。 QUOTED_IDENTIFIERANSI_NULLS 都是“粘性”设置,因此在创建触发器时生效的设置在执行时使用。 OFF 设置是为了兼容旧版,不应继续使用。

最佳做法是在这些设置为 ON 的情况下创建过程、触发器等,以确保与较新的 SQL Server 功能兼容。让您的 DBA 删除并使用设置 ON 重新创建服务器触发器。

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多