Sql server 从SQL Server表生成XML文件所需的所有步骤
我需要以指定的XML格式生成输出,虽然在2021年很容易,但我首先尝试使用服务将其转换为XSD,并将其与我的SQL一起使用(使用Sql server 从SQL Server表生成XML文件所需的所有步骤,sql-server,xml,tsql,xquery-sql,Sql Server,Xml,Tsql,Xquery Sql,我需要以指定的XML格式生成输出,虽然在2021年很容易,但我首先尝试使用服务将其转换为XSD,并将其与我的SQL一起使用(使用创建XML模式集合Schema1作为@Schema1);但是这不起作用,我怀疑使用XSD生成XML没有简单的方法,仍然需要使用选择,如果我错了,请纠正我。我下面的例子不是最终的。我使用的是SQL Server 2017,只有SSMS作为我的工具。(没有.NET可用) 这是我的示例XML <?xml version="1.0" encoding=
创建XML模式集合Schema1作为@Schema1
);但是这不起作用,我怀疑使用XSD生成XML没有简单的方法,仍然需要使用选择,如果我错了,请纠正我。我下面的例子不是最终的。我使用的是SQL Server 2017,只有SSMS作为我的工具。(没有.NET可用)
这是我的示例XML
<?xml version="1.0" encoding="UTF-8"?>
<Users>
<User Active="0" gender="Male" DOB="1965-02-12" mi="X" lName="John" fName="Dorx">
<CInfo ResArea="Montigo"/>
<Demographic race="Asian" HE="No"/>
<RA>
<Memb StartDD="2004-06-11" eStatus="Active" StatusAsOf="2004-05-12" UserID="XHD15"/>
</RA>
</User>
<User Active="0" gender="Male" DOB="1977-04-14" mi="X" lName="Mario" fName="Ma">
<CInfo ResArea="Blanco"/>
<Demographic race="White" HE="Yes"/>
<RA>
<Memb StartDD="2004-02-22" eStatus="Active" StatusAsOf="2004-03-26" UserID="MMX12"/>
<Memb StartDD="2004-12-22" eStatus="Active" StatusAsOf="2004-05-26" UserID="MMX12"/>
</RA>
</User>
</Users>
请尝试以下解决方案
下面的SQL使用两个别名:p(arent)和c(hild)
生成嵌套XML时,父数据集和子数据集通过WHERE
子句连接
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (
ID INT IDENTITY PRIMARY KEY,
UserID CHAR(5), DOB DATE,
lName VARCHAR(20),
fName VARCHAR(20),
mi VARCHAR(20),
ResArea VARCHAR(30),
StartDD DATE,
eStatus VARCHAR(10),
StatusAsOf DATE,
race VARCHAR(20),
HE VARCHAR(5)
);
INSERT INTO @tbl VALUES
('XHD15', '1965-02-12', 'John' , 'Dorx', 'x', 'Montigo', '2004-06-11', 'Active', '2004-05-12', 'Asian', 'No'),
('MMX12', '1977-04-14', 'Mario', 'Ma' , 'x', 'Blanco' , '2004-02-22', 'Active', '2004-03-26', 'White', 'No'),
('MMX12', '1977-04-14', 'Mario', 'Ma' , 'x', 'Blanco' , '2004-12-22', 'Active', '2004-12-26', 'White', 'No');
-- DDL and sample data population, end
SELECT Lname AS [@Lname], Fname [@Fname], mi [@mi], DOB [@DOB]
, ResArea AS [CInfo/@ResArea]
, race AS [Demographic/@race], HE AS [Demographic/@HE]
, (SELECT StartDD AS [@StartDD]
, eStatus AS [@eStatus]
, StatusAsOf AS [@StatusAsOf]
, UserID AS [@UserID]
FROM @tbl AS c
WHERE p.UserID = c.UserID
FOR XML PATH('Memb'), TYPE, ROOT('RA')
)
FROM @tbl AS p
GROUP BY p.UserID, p.Lname, p.Fname, p.mi, p.DOB, p.ResArea, p.race, p.HE
FOR XML PATH ('User'), TYPE, ROOT ('Users');
<Users>
<User Lname="Mario" Fname="Ma" mi="x" DOB="1977-04-14">
<CInfo ResArea="Blanco" />
<Demographic race="White" HE="No" />
<RA>
<Memb StartDD="2004-02-22" eStatus="Active" StatusAsOf="2004-03-26" UserID="MMX12" />
<Memb StartDD="2004-12-22" eStatus="Active" StatusAsOf="2004-12-26" UserID="MMX12" />
</RA>
</User>
<User Lname="John" Fname="Dorx" mi="x" DOB="1965-02-12">
<CInfo ResArea="Montigo" />
<Demographic race="Asian" HE="No" />
<RA>
<Memb StartDD="2004-06-11" eStatus="Active" StatusAsOf="2004-05-12" UserID="XHD15" />
</RA>
</User>
</Users>
输出XML
-- DDL and sample data population, start
DECLARE @tbl TABLE (
ID INT IDENTITY PRIMARY KEY,
UserID CHAR(5), DOB DATE,
lName VARCHAR(20),
fName VARCHAR(20),
mi VARCHAR(20),
ResArea VARCHAR(30),
StartDD DATE,
eStatus VARCHAR(10),
StatusAsOf DATE,
race VARCHAR(20),
HE VARCHAR(5)
);
INSERT INTO @tbl VALUES
('XHD15', '1965-02-12', 'John' , 'Dorx', 'x', 'Montigo', '2004-06-11', 'Active', '2004-05-12', 'Asian', 'No'),
('MMX12', '1977-04-14', 'Mario', 'Ma' , 'x', 'Blanco' , '2004-02-22', 'Active', '2004-03-26', 'White', 'No'),
('MMX12', '1977-04-14', 'Mario', 'Ma' , 'x', 'Blanco' , '2004-12-22', 'Active', '2004-12-26', 'White', 'No');
-- DDL and sample data population, end
SELECT Lname AS [@Lname], Fname [@Fname], mi [@mi], DOB [@DOB]
, ResArea AS [CInfo/@ResArea]
, race AS [Demographic/@race], HE AS [Demographic/@HE]
, (SELECT StartDD AS [@StartDD]
, eStatus AS [@eStatus]
, StatusAsOf AS [@StatusAsOf]
, UserID AS [@UserID]
FROM @tbl AS c
WHERE p.UserID = c.UserID
FOR XML PATH('Memb'), TYPE, ROOT('RA')
)
FROM @tbl AS p
GROUP BY p.UserID, p.Lname, p.Fname, p.mi, p.DOB, p.ResArea, p.race, p.HE
FOR XML PATH ('User'), TYPE, ROOT ('Users');
<Users>
<User Lname="Mario" Fname="Ma" mi="x" DOB="1977-04-14">
<CInfo ResArea="Blanco" />
<Demographic race="White" HE="No" />
<RA>
<Memb StartDD="2004-02-22" eStatus="Active" StatusAsOf="2004-03-26" UserID="MMX12" />
<Memb StartDD="2004-12-22" eStatus="Active" StatusAsOf="2004-12-26" UserID="MMX12" />
</RA>
</User>
<User Lname="John" Fname="Dorx" mi="x" DOB="1965-02-12">
<CInfo ResArea="Montigo" />
<Demographic race="Asian" HE="No" />
<RA>
<Memb StartDD="2004-06-11" eStatus="Active" StatusAsOf="2004-05-12" UserID="XHD15" />
</RA>
</User>
</Users>
提问时,您需要提供一个最小的可重复示例。请参考以下链接:请提供以下内容:(1)DDL和示例数据填充,即创建表和插入T-SQL语句。(2) 您需要做什么,即逻辑和代码尝试在T-SQL中实现它。(3) 所需输出,基于上述#1中的样本数据。(4) 您的SQL Server版本(选择@@version;)