【问题标题】:Double Quotes are being ignored by SQL Server when passed to a string variable传递给字符串变量时,SQL Server 忽略双引号
【发布时间】:2018-04-13 03:41:29
【问题描述】:

我在 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 周围没有双引号(例如 &lt;?xml version=1.0 encoding=UTF-8?&gt; )外,所有内容都正确显示。添加双引号后,我就可以在浏览器中正确查看 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)
                       )
           )

【问题讨论】:

  • 文本是如何进入文件的?

标签: sql-server string bcp double-quotes quoted-identifier


【解决方案1】:

这个答案是将“替换为''''。虽然它只会打印单引号。对于浏览器,用“双引号打开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)))'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2021-08-03
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多