Я работаю над приложением, которое берет данные из нашей БД и выводит xml-файл, используя FOR XML AUTO, ELEMENTS в конце сгенерированного запроса, а затем XSLT, чтобы преобразовать его так, как мы хотим. Однако в конкретном случае, когда мы генерируем некоторые данные с использованием скалярной функции sql, он всегда помещает этот элемент в узел вложенной таблицы с именем, совпадающим с узлом таблицы, в котором он уже находится (так что это будет таблица xyz, это будет print("<xyz><node1></node1><xyz><generated-node-from-function></generated-node-from-function></xyz>");
Независимо от того, что я пытаюсь (даже непосредственно манипулируя копией sql, сгенерированной приложением), всегда создается этот дополнительный слой узла, что вызывает проблемы позже, когда мы пытаемся обработать этот xml для извлечения данных позже. Есть ли какое-то конкретное свойство, заставляющее генератор xml на сервере sql работать таким образом, и есть ли способ предотвратить его, чтобы я мог сохранить сгенерированный узел данных на том же уровне, что и остальные данные для таблицы, с которой он связан?
Редактировать: в некоторых случаях переименовывать столбцы / таблицы, но в остальном должен быть такой же sql.
SELECT * FROM (SELECT column1,column2,column3,iduser,jstart,jstop,jbatchperiod,jinactive,processed,column4,lock,column5,batchticketmicr,machineid,sjobopex,szopexrefid,jreceived,jstartopex,jstopopex,idspecialmicr,idp2batchoriginal,stateflags,bcrossrefid,bidentifier1,bidentifier2,bidentifier3,bidentifier4,bidentifier5,idexport,idimport,rsahash FROM table1) table1
LEFT JOIN (SELECT column21,ienvelope,isort,column1,idtemplate,processed,column4,lock,envelopetypecode,szqueuesvisitedunique,exportdate,jcompleted,status,ipriority,idbankaccount,iprioritybeforerzbump,fstoredrecondata,cscountyid,column10,column11,checkbox1,checkbox2,column12,column13,column14,xxxempfein,column15,column16,originalenvelopeid,column17,column18,xxxoag,trackingnumber,csldc,ecrossrefid,postmark,routingflags,eidentifier1,eidentifier2,eidentifier3,eidentifier4,eidentifier5,idexport FROM envelope) envelope ON table1.column1=Envelope.column1
LEFT JOIN (SELECT column21,column22,isort,column23,processed,side,pagetypecode,rawmicrline,rawscanline,rawbarcode,exportid,szlocandconf,szlocandconfpagefields,idformtemplate,szparms,rawmarksense,audittrail,audittrailelectronic,pixheight,pixwidth,ocrattemptcounter,idspecialmicr,idpageexception,pagemodifierflags,column10,csldc,rejectdate,rejectuser,rejectqueue,fsupervisorreject,xxxempno,xxxtraceno,xxxemplcnt,checkbox1,keyword,templatealtered,templateflags,pidentifier1,pidentifier2,pidentifier3,pidentifier4,pidentifier5,isscanlinevalid,idexport,clickcount FROM Table2) Table2 ON Envelope.column21=Page.column21
LEFT JOIN (select column22, column21, dbo.Fileimagepath(column21, column22) as path from Table2) Fileimg ON Table2.column21=FileImg.column21 AND Table2.column22=FileImg.column22
WHERE Envelope.column21 = 8
FOR XML AUTO, ELEMENTS
Другое редактирование: в основном результаты FileImg помещаются в дополнительный набор тегов Table2 внутри существующей вкладки table2 с остальными данными.
Еще одно редактирование: при тестировании на другой базе данных с тем же sql все работало корректно, кажется, что в моей базе данных есть неверный параметр или сохраненный процесс отличается идет дальше, чтобы исследовать .
Если это не сработает, я попробую другие предложения, приведенные выше, спасибо за помощь:)