Двойные кавычки игнорируются SQL Server при передаче в строковую переменную
Я написал хранимую процедуру в 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)
)
)
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)))'