Я просмотрел несколько вопросов SO об использовании FOR XML, но либо пропустил, либо не нашел ничего конкретного для моего запроса.
К счастью, а может и нет, служба, в которую мне нужно отправить данные, хочет, чтобы поля из моей таблицы (таблиц) были представлены как атрибуты, а не элементы, что означает, что я могу использовать FOR XML AUTO. Однако для этого требуются некоторые вещи, которые я не уверен, как написать правильный sql для достижения, и для которых я приветствовал бы некоторые советы.
Некоторые поля (скажем, у меня есть три с именами Log1, Log2 и Log3) должны быть возвращены как один атрибут, вызываемый для аргументов Logs. Если все три поля журнала имеют значение Null, это должна быть пустая строка, или, если они содержат данные, они должны быть объединены запятой в качестве разделителя. Я подозреваю, что простой Coalesce здесь не подходит, но я не совсем уверен, что еще можно сделать.
Как я уже сказал, я приветствовал бы некоторые предложения. Спасибо.
РЕДАКТИРОВАТЬ
Извиняюсь, нужно было добавить sql для помощи.
SELECT LandingId,
VesselId,
TicketNumber,
CONVERT(VARCHAR(10),LandingDate1,112) AS landingdate1,
Log1,
Log2,
Log3,
COALESCE(VesselName,'') AS vesselName,
VesselOwner
FROM Landings.LandingHeaders AS sale FOR XML AUTO
Log1, Log2 и Log3 должны стать журналами и представлять собой либо пустую строку, если все они равны нулю, либо список, разделенный запятыми, если они содержат данные.
EDIT2 (текущий вывод с удаленными VesselName и Owner для сохранения конфиденциальности)
<sale LandingId="3388" VesselId="1" TicketNumber="1 " landingdate1="20130705" />
Ass the Log values are null nothing is being returned, Not sure if I can use a form of coalesce to either produce the empty string or a comma separated list. I do know that I need to trim the ticketNumber.