SQL Server 2019中SSMS策略ExecuteSql执行FOR XML PATH('')报错
SQL Server管理策略中ExecuteSql调用FOR XML PATH('')报错105的原因及解决
报错核心原因
你遇到的错误105,本质是单引号嵌套冲突导致SQL解析器误判语法。
在SSMS的管理策略表达式里,ExecuteSql的第二个参数是用单引号包裹的SQL语句。当你把FOR XML PATH('')写进去时,PATH('')里的单引号会和外层包裹SQL的单引号撞车——解析器会把PATH('后面的第一个单引号当成外层字符串的闭合标记,剩下的内容就成了无引号的非法语法,直接抛出“引号未闭合、语法错误”的提示。
比如错误写法:
ExecuteSql('STRING', 'SELECT name + '', '' FROM sys.databases FOR XML PATH('')')
这里PATH('')里的单引号会打断外层字符串的闭合逻辑。
解决方法:正确转义单引号
在SQL Server的字符串中,单引号必须用两个连续单引号来转义。针对FOR XML PATH('')的场景,你需要把里面的空字符串单引号转义成'',正确写法如下:
ExecuteSql('STRING', 'SELECT name + '', '' FROM sys.databases FOR XML PATH('''')')
此时PATH('''')会被SQL正确解析为PATH(''),既保留了无<row>标签的XML输出(解决之前的字符串截断问题),又避免了引号冲突。
验证小技巧
把调整后的SQL语句单独拿到SSMS查询窗口执行,确认语法没问题后再放回策略的表达式里,能避免不必要的调试麻烦。
内容的提问来源于stack exchange,提问作者Bruce Dimon
相关产品推荐
相关产品推荐

