SQL 服务器在传递给字符串变量时忽略双引号
Double Quotes are being ignored by SQL Server when passed to a string variable
我在 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)
)
)
这个答案是将 " 替换为 ''''。虽然它只会打印单引号。对于浏览器来说,用 " 双引号打开 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)))'
我在 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)
)
)
这个答案是将 " 替换为 ''''。虽然它只会打印单引号。对于浏览器来说,用 " 双引号打开 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)))'