WITH QUOTES 子句
当指定 WITH QUOTES 或 WITH QUOTES ON 时,字符串表达式中的任何双引号都被假定用于界定标识符。当未指定 WITH QUOTES 或指定了 WITH QUOTES OFF 时,对字符串表达式中的双引号的处理方式取决于 quoted_identifier
选项的当前设置。
如果使用传递到存储过程中的对象名构造要执行的语句,但该名称可能需要双引号,并且当 quoted_identifier 设置为 Off 时可能调用该过程,这时使用 WITH QUOTES 非常有用。
WITH ESCAPES 子句
使用 WITH ESCAPES OFF 可以忽略字符串表达式中的任何转义序列(例如 \n、\x 或 \\)。例如,两个连续的反斜线仍保留为两个反斜线,而不会转换为一个反斜线。缺省设置与 WITH ESCAPES ON 相同。
WITH ESCAPES OFF 的用途之一是为了更简便地执行引用了包含反斜杠的文件名的动态构造语句。
在某些环境下,string-expression 中的转义序列在执行 EXECUTE IMMEDIATE 语句之前已被转换。例如,复合语句在执行之前进行语分析,转义序列会在分析过程中被转换,而不论 WITH ESCAPES 如何设置。在此类环境下,WITH ESCAPES OFF 可防止进一步的转换。例如:
BEGIN
DECLARE String1 LONG VARCHAR;
DECLARE String2 LONG VARCHAR;
EXECUTE IMMEDIATE
'SET String1 = ''One backslash: \\\\ ''';
EXECUTE IMMEDIATE WITH ESCAPES OFF
'SET String2 = ''Two backslashes: \\\\ ''';
SELECT String1, String2
END
WITH BATCH 子句
WITH BATCH 子句允许您控制 EXECUTE IMMEDIATE 语句中批处理的执行。在过程运行时,设置 WITH BATCH OFF 可提供保护以避免意外的 SQL 注入。
缺省值为 WITH BATCH ON(除了 dbo 所拥有的过程)。
使用 WITH BATCH OFF 时,string-expression 所指定的语句必须是单个语句。
WITH RESULT SET 子句
WITH RESULT SET 子句使服务器可以正确定义包含它的过程。指定 WITH RESULT SET ON 或 WITH RESULT SET OFF 同时影响创建过程时和执行过程时所发生的事件。缺省选项为 WITH RESULT SET
OFF。
可以通过指定 WITH RESULT SET ON 让 EXECUTE IMMEDIATE 语句返回结果集。使用该子句,包含过程被标记为返回结果集。