当传递给字符串变量时,SQL Server会忽略双引号

时间:2018-04-13 03:41:29

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

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

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

function setup() {
    var myImage = document.getElementsByClassName("image");
    document.getElementsByClassName("remove")[0].
    addEventListener("click", function(){
    myImage[0].parentNode.removeChild(myImage[0]);}); 
}

// Example case. 
document.body.innerHTML = `
<div class="image">
  <img src="firstimage.jpg" alt="First">
  <button class="remove">X</button>
</div>
<div class="image">
  <img src="secondimage.jpg" alt="Second">
  <button class="remove">X</button>
</div>`;

setup();

document.getElementsByClassName("remove")[0].click();
console.log(document.body.innerHTML);

问题在于,当传递给变量时,编码所需的双引号会被忽略。这就是为什么当我在浏览器中打开生成的XML文件时,它看起来完全是空白的。但是当我打开文本时编辑器一切都正确显示,除了1.0和UTF-8之间没有双引号(例如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文件内容。

<?xml version=1.0 encoding=UTF-8?>

此选项没有帮助。

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

SET QUOTED_IDENTIFIER ON

1 个答案:

答案 0 :(得分:0)

这个答案是替代&#34;到&#39;&#39;&#39;。虽然它只打印单引号。对于浏览器来说,使用&#34;打开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)))'