我有一个存储过程[A],它创建了另一个存储过程[B]。
[A]永远不会由最终用户运行,并且没有参数或其他不受信任的数据。相反,它仅用于自动化创建复杂的SP [B]。除非[A]的内部发生变化,否则[A]将始终具有相同的结果。因此,我认为这是安全的。
[B]需要开启Quoted_Identifiers选项,因为它使用xml。
如果我复制并粘贴生成的SP,则可以正常工作,但如果让[A]使用EXEC创建它,则在运行时SP失败。
我尝试在[B]内部添加SET QUOTED_IDENTIFIERS ON
,但似乎没有任何效果。
如果使用sp_ExecuteSQL也会出现相同的问题。我还尝试在调用[B]之前将其设置为ON,但似乎也没有效果(但是在始终开启的情况下,它为什么会有效呢)
我的猜测是,EXEC和sp_ExecuteSQL始终使用OFF选项进行设置,并且SET命令由解析器而不是SQL引擎本身处理。那么我该如何使EXEC正确创建存储过程?
QUOTED_IDENTIFIER
值)。如果您能看一下,我会非常感激...尽管我认为从上面已经知道答案了。 - freefaller