【发布时间】:2014-04-14 23:29:04
【问题描述】:
我有一个存储过程 [A],它创建另一个存储过程 [B]
[A] 永远不会由最终用户运行,并且没有参数或其他不受信任的数据。相反,我只是使用它来自动创建复杂的 SP [B]。 [A] 除非其内部结构发生变化,否则将始终得到相同的结果。因此我认为这是安全的。
[B] 需要 Quoted_Identifiers ON,因为它使用 xml。
如果我复制并粘贴生成的 SP,它可以正常工作,但如果我让 [A] 使用 EXEC 创建它,那么 SP 在运行时会失败。
我尝试在 [B] 中添加SET QUOTED_IDENTIFIERS ON,但效果不明显。
如果我使用 sp_ExecuteSQL 也会出现同样的问题 我也尝试在调用 [B] 之前将其设置为打开,但这似乎也没有效果(但为什么会在它始终打开的上下文中)
我的猜测是 EXEC 和 sp_ExecuteSQL 总是使用设置 OFF 并且 SET 命令由解析器而不是 SQL 引擎本身处理。那么如何让 EXEC 正确创建 proc 呢?
【问题讨论】:
标签: sql sql-server stored-procedures sp-executesql quoted-identifier