Alguém poderia me fornecer algumas pistas ou soluções para recuperar conjuntos de registros como abaixo?
Nota: eu li a documentação do msdn, mas não me leva a lugar nenhum além da queda de cabelo :(
Apenas para supor, acho que tenho 2 tabelas conectadas via campo Rid
Tabela 1 colunas:
Rid, UserName, Hash
Tabela 2 colunas:
Rid, Phone, City, Email
Table1
e Table2
estão conectados através da Rid
coluna.
Eu gostaria de ter uma saída xml usando xml auto, ou xml explícito ou qualquer outra operação xml que você tenha no SQL Server 2005 Express.
Saída esperada:
<UserDetails>
<Account>
<UserName>
</UserName>
<Hash>
</Hash>
</Account>
<Personal>
<Phone>
</Phone>
<City>
</City>
</Personal>
</UserDetails>
@matt Observe o procedimento que criei abaixo. Ao executar o procedimento armazenado com código no início, você saberá o problema que enfrento
stack_getusers '<Request Type="GetUsers" CRUD="R">
<UserDetails>
<Rid></Rid>
</UserDetails>
</Request>'
CREATE PROCEDURE [dbo].[stack_getusers]
@doc NTEXT
AS
DECLARE @idoc INT
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT
t1.UserName AS "Account/UserName",
t1.Hash AS "Account/Hash",
(
SELECT t2.Phone AS "Personal/Phone",
t2.City AS "Personal/City"
FROM table1 t2
INNER JOIN table2 t3 ON t2.rid = t3.rid WHERE t2.rid = t1.rid AND (xml.Rid = '' OR t1.rid = xml.Rid)
FOR XML PATH('Personals')
)
FROM table1 t1
INNER JOIN table2 t2 ON t1.rid = t2.rid
OPENXML (@idoc,'/Request/Users',2)
WITH (Rid int) as xml
where (xml.Rid = '' OR t1.rid = xml.Rid)
FOR XML PATH ('UserDetails');
EXEC sp_xml_removedocument @idoc
Experimente:
Eu adicionei um segundo exemplo de código em resposta ao seu comentário. Não tenho ideia se isso vai funcionar ou se é a melhor maneira de realizar o que você deseja. Por favor, me avise.