0

我在 SQL Server 2016 中编写了一个生成 XML 文件的存储过程

创建 XML 文件时,我需要明确指定编码。这就是为什么我将显式编码添加到 XML 内容的结果中。

SELECT @SQLStr = 
'SELECT N''<?xml version="1.0" encoding="UTF-8"?>'' 
            + (SELECT CAST((SELECT [Id], [FirstName], [LastName], [Address] 
                            FROM InputTemp.dbo.XMLTest AS Body 
                            WHERE Id = '''  + str(@Id) + ''' 
                            FOR XML AUTO, ELEMENTS) AS NVARCHAR(MAX)
                          )
              )'

问题是编码所需的双引号 " 在传递给变量时被忽略。这就是为什么当我在浏览器中打开生成的 XML 文件时它看起来完全空白。但是当我在文本编辑器中打开时,一切都是显示正确,除了 1.0 和 UTF-8 周围没有双引号(例如<?xml version=1.0 encoding=UTF-8?>)。添加双引号后,我就可以在浏览器中正确查看 XML 文件内容。

SET QUOTED_IDENTIFIER ON

这个选项没有帮助。

但是当我单独运行这个语句时,会出现双引号。

SELECT N'<?xml version="1.0" encoding="UTF-8"?>' 
         + (SELECT CAST((SELECT [Id], [FirstName], [LastName], [Address] 
                         FROM InputTemp.dbo.XMLTest AS Body 
                         WHERE Id = '''  + str(@Id) + ''' 
                         FOR XML AUTO, ELEMENTS) AS NVARCHAR(MAX)
                       )
           )
4

1 回答 1

0

这个答案是将“替换为''''。虽然它只会打印单引号。对于浏览器来说,用“双引号打开XML文件就足够了。

请注意,数据库兼容级别必须为 2016。

SELECT @SQLStr = 
'SELECT N''<?xml version=''''1.0'''' encoding=''''UTF-8''''?>'' + (SELECT CAST((SELECT [Id], [FirstName], [LastName], [Address] FROM InputTemp.dbo.XMLTest AS Body WHERE Id = '''  + str(@Id) + ''' FOR XML AUTO, ELEMENTS) AS NVARCHAR(MAX)))'
于 2018-04-13T21:14:43.250 回答