Я знаю, что заменить <
и >
на <
и >
на сервере sql спросили на
Заменить «<» и «>» на «<»и «>» в SQL Server
, но мне нужно расширить его.Я пытаюсь создать отформатированный HTML-код с SQL-сервера MS 2016.
Что у меня есть:
DECLARE @json nvarchar(max) = (SELECT DISTINCT AU2.PMID,
SUBSTRING(
(
SELECT ', '+ CASE WHEN AU1.Format IS Not Null Then +'<b>' +
AU1.LastName+ ' ' + AU1.Initials + '</' + AU1.Format + '>' ELSE
AU1.LastName + ' ' + AU1.Initials END AS [text()]
FROM dbo.[Publication.PubMed.Author] AU1
WHERE AU1.PMID = AU2.PMID
ORDER BY AU1.PmPubsAuthorID
FOR XML PATH ('')
), 3, 1000) + '. Journal Name ' [Authors]
FROM dbo.[Publication.PubMed.Author] AU2
WHERE AU2.[PMID] =27702896 FOR JSON AUTO)
SELECT @json
И что я получаю обратно:
Name DG, Name K, Name A, Chen FK, Song X, Pirun M, Santiago PM, Kim-Kiselak C, Platt JT, Lee E, Hodges E, <b>Rosebrock AP</b>, Bronson RT, Socci ND, Hannon GJ, Jacks T, Varmus H Journal Name
Если я попытаюсь ввести ТИП в
FOR XML PATH(''), TYPE
Я получаю сообщение об ошибке:
Тип данных аргумента xml недопустим для аргумента 1 функции подстроки.
Я пытался добавить REPLACE
replace(CASE WHEN AU1.Format IS Not Null Then +'<b>' +
AU1.LastName+ ' ' + AU1.Initials + '</b>' ELSE
AU1.LastName + ' ' + AU1.Initials END, '<', '<')
Но тогда я получаю сообщение об ошибке
Тип данных xml нельзя выбрать как DISTINCT, потому что он несопоставим.
Лучшее, чтоЯ могу придумать:
SET @json = replace(@json, '<\', '<')
SET @json = replace(@json, '<', '<')
SET @json = replace(@json, '>', '>')
Непосредственно перед финалом SELECT @json
.
У меня будет более 1000 записей, которые мне нужно вытащить.Нужно ли делать это по шагам?
На основании кода ТТ я изменил свой на
DECLARE @json nvarchar(max) = (SELECT DISTINCT AU2.PMID,
SUBSTRING(
(
SELECT ', '+ CASE WHEN AU1.Format IS Not Null Then +'<b>' +
AU1.LastName+ ' ' + AU1.Initials + '</b>' ELSE
AU1.LastName + ' ' + AU1.Initials END AS [text()]
FROM dbo.[Publication.PubMed.Author] AU1
WHERE AU1.PMID = AU2.PMID
ORDER BY AU1.PmPubsAuthorID
FOR XML PATH (''),TYPE).value('.[1]','NVARCHAR(MAX)'
), 1, 1000) + '. Journal Name ' [Authors]
FROM dbo.[Publication.PubMed.Author] AU2
WHERE AU2.[PMID] =27702896 FOR JSON AUTO)
И это прекрасно работает.но см. комментарий ниже