我在 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)
)
)