Получить структурированный XML из Sql Server Express 2005 - PullRequest
0 голосов
/ 19 апреля 2011

Я хотел бы получить вывод XML из индексированных таблиц полнотекстового поиска, как показано ниже. но мой код генерирует неправильный синтаксис возле объединения мой код

SELECT
Table1.Name 'Table1/Name',
Table1.Email 'Table1/Email',
(    SELECT
     Table2.Address 'Address',
     Table2.Phone 'Phone',
     FROM Details Table2
     INNER JOIN Regd Table3 ON Table3.Code = Table2.Code
     AND (Table3.SubCode = xml.SubCode) AND (Table1.Id = Table3.Id)
     FOR XML PATH ('Details'),Type) as 'Table1',
FROM Users Table1
INNER JOIN CONTAINSTABLE(Users,[Name], @SearchKeys) AS KEY_TBL ON Id = KEY_TBL.[KEY]
INNER JOIN Regd Table3 ON Table3.Id = Table1.Id,
OPENXML (@idoc,'/Request/List',2)
WITH (SubCode NVARCHAR(20)) as xml
WHERE  (xml.SubCode = '' or Table3.SubCode = xml.SubCode) AND (Table3.Id = Table1.Id)
FOR XML PATH ('List')
UNION
SELECT
SELECT
Table1.Name 'Table1/Name',
Table1.Email 'Table1/Email',
(    SELECT
     Table2.Address 'Address',
     Table2.Phone 'Phone',
     FROM Details Table2
     INNER JOIN Regd Table3 ON Table3.Code = Table2.Code
     AND (Table3.SubCode = xml.SubCode) AND (Table1.Id = Table3.Id)
     FOR XML PATH ('Details'),Type) as 'Table1',
FROM Users Table1
INNER JOIN CONTAINSTABLE(Users,[Email], @SearchKeys) AS KEY_TBL ON Id = KEY_TBL.[KEY]
INNER JOIN Regd Table3 ON Table3.Id = Table1.Id,
OPENXML (@idoc,'/Request/List',2)
WITH (SubCode NVARCHAR(20)) as xml
WHERE  (xml.SubCode = '' or Table3.SubCode = xml.SubCode) AND (Table3.Id = Table1.Id)
FOR XML PATH ('List')

здесь положено, я ожидал иметь

<List>
<Table1>
<Name></Name>
<Email></Email>
<Details>
<Address></Address>
<Phone></Phone>
</Details>
</Table1>
</List>

я думаю, что параметр request xml здесь не будет полезен, так как это всего лишь синтаксическая ошибка

1 Ответ

1 голос
/ 19 апреля 2011

В вашем коде много синтаксических ошибок, но я предполагаю, что они есть, потому что вы удалили много вещей, которые, по вашему мнению, были не нужны.

Вы говорите, что получили ошибку Incorrect syntax near the keyword 'union'.

Это даст вам эту ошибку,

select *
from YourTable
for xml path('list')
union
select *
from YourTable
for xml path('list')

Вы должны встроить запросы в оператор выбора, подобный этому.

select
(select *
 from YourTable
 for xml path('list'))
union
select
(select *
 from YourTable
 for xml path('list'))

Если вы хотите, чтобы столбцы имели тип XML, вам нужно добавить type и использовать union all, потому что The xml data type cannot be selected as DISTINCT because it is not comparable.

select
(select *
 from YourTable
 for xml path('list'), type)
union all
select
(select *
 from YourTable
 for xml path('list'), type)

Я понятия не имею, даст ли это в конечном итоге желаемый результат, но в этом причина Incorrect syntax near the keyword 'union' и что вы можете с этим сделать.

...