【问题标题】:Procedures shipped with SSISDB causing issues with Filtered IndexesSSISDB 附带的过程导致过滤索引出现问题
【发布时间】:2020-03-22 10:49:57
【问题描述】:

SQL Server 2014 我相信。出于某种原因,SSISDB 中的程序将 QUOTED_IDENTIFIER 设置为 OFF,并且想知道是否有人对这可能的原因有任何参考框架,如果它可能很重要。

不幸的是,我不知道更改这些程序以将它们设置为 ON 是否可取,但如果有人对此有任何想法,那也将是极大的赞赏。

【问题讨论】:

  • 我猜它是“不受支持的”。您遇到的实际问题是什么?
  • 您的问题标题表明您怀疑目录/内部 procs 的设置导致过滤索引出现问题。你能详细说明一下吗?
  • 在表上添加过滤索引将花费我大约一分钟到一秒或更短的报告时间。但是 SSISDB 附带的一些存储过程将带引号的标识符设置为 OFF(那些涉及清除 SSISDB 历史记录的标识符),当它们使用索引命中表时,这当然会失败。我已经删除了索引,但我还是有点失望,我不得不这样做。我只是想知道是否有人对在这些程序中将其设置为打开的风险有任何见解,或者为什么他们可能会以这种方式开始。

标签: sql-server ssis ssis-2014


【解决方案1】:

最佳 MSSQL 做法是set it OFF

它基本上允许您使用保留关键字或可以包含 Transact-SQL 通常不允许的字符。即“选择”、“来自”、“身份”等。

SET QUOTED_IDENTIFIER is OFF 时,标识符不能被引用,并且必须遵循标识符的所有 Transact-SQL 规则。 Reference...

SET QUOTED_IDENTIFIER is ON(默认)时,所有由双引号分隔的字符串都被解释为对象标识符。因此,带引号的标识符不必遵循标识符的 Transact-SQL 规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许使用的字符。

QUOTED_IDENTIFIER is ON的用法

  • 创建过滤索引时
  • 当您调用 XML 数据类型方法时
  • JSON 源数据导入数据库

更改设置所需的权限

  • 用户需要成为公共角色的成员

示例

SET QUOTED_IDENTIFIER OFF
GO
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);

↪使用“select”作为表名,上面的查询在QUOTED_IDENTIFIER set OFF时会失败

SET QUOTED_IDENTIFIER ON;
GO
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);

↪使用“select”作为表名,上面的查询会在QUOTED_IDENTIFIER set ON时得到成功

Reference

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 2016-01-27
    • 1970-01-01
    • 2021-06-08
    • 2015-12-14
    • 2021-04-25
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多