使用xQuery以XML格式获取SQL结果
我希望以以下示例格式生成XML输出:使用xQuery以XML格式获取SQL结果,sql,sql-server,xml,xquery,Sql,Sql Server,Xml,Xquery,我希望以以下示例格式生成XML输出: <PSD006-ShortTermLoans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD006:1 PSD006-Schema.xsd" xmlns="urn:fsa-gov-uk:MER:PSD006:1"> <PSDFeedHe
<PSD006-ShortTermLoans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD006:1 PSD006-Schema.xsd" xmlns="urn:fsa-gov-uk:MER:PSD006:1">
<PSDFeedHeader>
<Submitter>
<SubmittingFirm>713984</SubmittingFirm>
</Submitter>
<ReportDetails>
<ReportCreationDate>2020-07-14</ReportCreationDate>
<ReportIdentifier>PSD006_713984__51</ReportIdentifier>
</ReportDetails>
</PSDFeedHeader>
<PSD006FeedMsg>
<CoreItems>
<FirmReferenceNumber>713984</FirmReferenceNumber>
<TransRef>713984_D000165940</TransRef>
<Cancellation>false</Cancellation>
</CoreItems>
<ShortTermLoans>
<TransactionDate>2029-06-16</TransactionDate>
<LoanAmount>150</LoanAmount>
<LoanType>HCST</LoanType>
<APR>500.00</APR>
<ArrangementFee>0</ArrangementFee>
<TotalAmountPayable>246</TotalAmountPayable>
<Rollover>N</Rollover>
<OrderOfRollover>0</OrderOfRollover>
<LengthOfTerm>101</LengthOfTerm>
<ReasonForLoan>P</ReasonForLoan>
<DOBOfBorrower>1999-08-26</DOBOfBorrower>
<PostCode>HP3 XXX</PostCode>
<MonthlyIncomeOfBorrower>1800</MonthlyIncomeOfBorrower>
<MaritalStatusOfBorrower>O</MaritalStatusOfBorrower>
<ResidentialStatusOfBorrower>X</ResidentialStatusOfBorrower>
<EmploymentStatusOfBorrower>EF</EmploymentStatusOfBorrower>
</ShortTermLoans>
</PSD006FeedMsg>
<PSD006FeedMsg>
<CoreItems>
<FirmReferenceNumber>713984</FirmReferenceNumber>
<TransRef>713984_D000156085</TransRef>
<Cancellation>false</Cancellation>
</CoreItems>
<ShortTermLoans>
<TransactionDate>2020-04-30</TransactionDate>
<LoanAmount>200</LoanAmount>
<LoanType>HCST</LoanType>
<APR>500.37</APR>
<ArrangementFee>0</ArrangementFee>
<TotalAmountPayable>282</TotalAmountPayable>
<Rollover>N</Rollover>
<OrderOfRollover>0</OrderOfRollover>
<LengthOfTerm>77</LengthOfTerm>
<ReasonForLoan>P</ReasonForLoan>
<DOBOfBorrower>1992-08-29</DOBOfBorrower>
<PostCode>BT10 XXX</PostCode>
<MonthlyIncomeOfBorrower>1700</MonthlyIncomeOfBorrower>
<MaritalStatusOfBorrower>O</MaritalStatusOfBorrower>
<ResidentialStatusOfBorrower>X</ResidentialStatusOfBorrower>
<EmploymentStatusOfBorrower>EF</EmploymentStatusOfBorrower>
</ShortTermLoans>
</PSD006FeedMsg>
</PSD006-ShortTermLoans>
713984
2020-07-14
PSD006_713984_51
713984
713984_D000165940
假的
2029-06-16
150
HCST
500
0
246
N
0
101
P
1999-08-26
HP3 XXX
1800
O
X
环境足迹
713984
713984_D000156085
假的
2020-04-30
200
HCST
500.37
0
282
N
0
77
P
1992-08-29
BT10 XXX
1700
O
X
环境足迹
我得到的输出是错误的。正如您在下面看到的,CoreItems元素并没有按照上面的示例格式为每个记录显示
<PSD006-ShortTermLoans xmlns="urn:fsa-gov-uk:MER:PSD006:1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD006:1 PSD006-Schema.xsd">
<PSDFeedHeader>
<Submitter>
<SubmittingFirm>713984</SubmittingFirm>
</Submitter>
<ReportDetails>
<ReportCreationDate>2021-01-18</ReportCreationDate>
<ReportIdentifier>PSD006_713984__50</ReportIdentifier>
</ReportDetails>
</PSDFeedHeader>
<PSD006FeedMsg>
<CoreItems>
<FirmReferenceNumber>713984</FirmReferenceNumber>
<TransRef>713984_D000147827</TransRef>
<Cancellation>false</Cancellation>
</CoreItems>
<ShortTermLoans>
<TransRef>1152538</TransRef>
<TransactionDate>2020-12-31T23:51:17.453</TransactionDate>
<LoanAmount>750.0000</LoanAmount>
<LoanType>HCST</LoanType>
<APR>4.950000000000000e+002</APR>
<ArrangementFee>0</ArrangementFee>
<TotalRepayable>713.1300</TotalRepayable>
<Rollover>N</Rollover>
<OrderOfRollovers>0</OrderOfRollovers>
<LengthOfTerm>9</LengthOfTerm>
<ReasonForLoan>P</ReasonForLoan>
<DOBofBorrower>1993-03-07T00:00:00</DOBofBorrower>
<Postcode>PA145UT</Postcode>
<NetMonthlyIncome>0.0000</NetMonthlyIncome>
<MaritalStatusOfBorrower>O</MaritalStatusOfBorrower>
<ResidentialStatusOfBorrower>X</ResidentialStatusOfBorrower>
<EmploymentStatusOfBorrower>EF</EmploymentStatusOfBorrower>
</ShortTermLoans>
<ShortTermLoans>
<TransRef>1152537</TransRef>
<TransactionDate>2020-12-31T23:42:17.337</TransactionDate>
<LoanAmount>100.0000</LoanAmount>
<LoanType>HCST</LoanType>
<APR>1.095800000000000e+003</APR>
<ArrangementFee>0</ArrangementFee>
<TotalRepayable>96.0800</TotalRepayable>
<Rollover>N</Rollover>
<OrderOfRollovers>0</OrderOfRollovers>
<LengthOfTerm>7</LengthOfTerm>
<ReasonForLoan>P</ReasonForLoan>
<DOBofBorrower>1964-02-22T00:00:00</DOBofBorrower>
<Postcode>CM23 XXX</Postcode>
<NetMonthlyIncome>0.0000</NetMonthlyIncome>
<MaritalStatusOfBorrower>O</MaritalStatusOfBorrower>
<ResidentialStatusOfBorrower>X</ResidentialStatusOfBorrower>
<EmploymentStatusOfBorrower>EF</EmploymentStatusOfBorrower>
</ShortTermLoans>
<ShortTermLoans>
<TransRef>1152536</TransRef>
<TransactionDate>2029-12-31T23:40:18.573</TransactionDate>
<LoanAmount>600.0000</LoanAmount>
<LoanType>HCST</LoanType>
<APR>4.950000000000000e+002</APR>
<ArrangementFee>0</ArrangementFee>
<TotalRepayable>570.5400</TotalRepayable>
<Rollover>N</Rollover>
<OrderOfRollovers>0</OrderOfRollovers>
<LengthOfTerm>9</LengthOfTerm>
<ReasonForLoan>P</ReasonForLoan>
<DOBofBorrower>1989-07-26T00:00:00</DOBofBorrower>
<Postcode>CW12 4WL</Postcode>
<NetMonthlyIncome>0.0000</NetMonthlyIncome>
<MaritalStatusOfBorrower>O</MaritalStatusOfBorrower>
<ResidentialStatusOfBorrower>X</ResidentialStatusOfBorrower>
<EmploymentStatusOfBorrower>EF</EmploymentStatusOfBorrower>
</ShortTermLoans>
713984
2021-01-18
PSD006_713984_50
713984
713984_D000147827
假的
1152538
2020-12-31T23:51:17.453
750
HCST
4.950000000000000e+002
0
713.1300
N
0
9
P
1993-03-07T00:00:00
PA145UT
0
O
X
环境足迹
1152537
2020-12-31T23:42:17.337
100
HCST
1.095800000000000e+003
0
96.0800
N
0
7.
P
1964-02-22T00:00:00
CM23 XXX
0
O
X
环境足迹
1152536
2029-12-31T23:40:18.573
600
HCST
4.950000000000000e+002
0
570.5400
N
0
9
P
1989-07-26T00:00:00
CW12 4WL
0
O
X
环境足迹
到目前为止,我的问题是:
-- DDL and sample data population, start
DECLARE @loans TABLE ( [Transref] varchar(16), [TransactionDate] date, [OriginalAdvance] money, [LoanType] varchar(4), [ContractualAPR] float(8), [OriginalProjectedTotalRepayable] money, [OriginalTerm] int, [ReasonforLoan] varchar(4), [DOB] date, [Postcode] varchar(8), [Salary] int, [SalaryFrequency] int, [ResidentialStatus] int, [EmploymentStatus] int )
INSERT INTO @Loans
VALUES
( '11', N'2020-06-22T00:00:00', 300.0000, 'HCST', 790, 1000.0000, 6, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '12', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '13', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '14', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '17', N'2020-08-15T00:00:00', 750.0000, 'HCST', 392.71, 1000.0000, 9, 'HCST', N'1995-01-01T00:00:00', 'SE21 8NZ', 15000, 1508, 1472, 449 ),
( '17', N'2020-08-15T00:00:00', 750.0000, 'HCST', 392.71, 1000.0000, 9, 'HCST', N'1995-01-01T00:00:00', 'SE21 8NZ', 15000, 1508, 1472, 449 ),
( '20', N'2020-07-30T00:00:00', 800.0000, 'HCST', 399.4, 1000.0000, 9, 'HCST', N'1985-03-12T00:00:00', 'EH21 6UH', 21000, 1499, 1477, 500 ),
( NULL, N'2020-08-05T00:00:00', 1000.0000, 'HCST', 790, 1000.0000, 12, 'HCST', N'1980-07-07T00:00:00', 'BD1 3LY', 2000, 1508, 1481, 470 ),
( '37', N'2020-08-22T00:00:00', 300.0000, 'HCST', 792.4, 1000.0000, 6, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 35000, 1508, NULL, 470 ),
( '38', N'2020-08-19T00:00:00', 1000.0000, 'HCST', 790, 1000.0000, 12, 'HCST', N'1990-07-07T00:00:00', 'BD1 3LY', 2000, 1508, 1481, 470 );
-- DDL and sample data population, end
DECLARE @SubmittingFirm VARCHAR(20) = '713984'
, @ReportCreationDate DATE = GETDATE()
, @Cancellation VARCHAR(10) = 'false';
;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' AS [xsi]
, DEFAULT 'urn:fsa-gov-uk:MER:PSD006:1')
SELECT (
SELECT TOP(10) * FROM @loans
FOR XML PATH('r'), TYPE, ROOT('root')
).query('<PSD006-ShortTermLoans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD006:1 PSD006-Schema.xsd"
xmlns="urn:fsa-gov-uk:MER:PSD006:1">
<PSDFeedHeader>
<Submitter>
<SubmittingFirm>{sql:variable("@SubmittingFirm")}</SubmittingFirm>
</Submitter>
<ReportDetails>
<ReportCreationDate>{sql:variable("@ReportCreationDate")}</ReportCreationDate>
<ReportIdentifier>PSD006_713984__50</ReportIdentifier>
</ReportDetails>
</PSDFeedHeader>
<PSD006FeedMsg>
<CoreItems>
<FirmReferenceNumber>{sql:variable("@SubmittingFirm")}</FirmReferenceNumber>
<TransRef>713984_D000147827</TransRef>
<Cancellation>{sql:variable("@Cancellation")}</Cancellation>
</CoreItems>
{
for $x in /root/r
return <ShortTermLoans>{$x/*}</ShortTermLoans>
}
</PSD006FeedMsg>
</PSD006-ShortTermLoans>');
--DDL和样本数据填充,开始
声明@loans TABLE([Transref]varchar(16),[TransactionDate]date,[OriginalAdvance]money,[LoanType]varchar(4),[ContractualAPR]float(8),[OriginalProjectedTotalRepayable]money,[OriginalAlterm]int,[ReasonforLoan]varchar(4),[DOB]date,[Postcode]varchar(8),[Salary]int,[SalaryFrequency]int,[ResidentialStatus]int,[EmploymentStatus]int)
插入@Loans
价值观
('11',N'2020-06-22T00:00:00',300.0000',HCST',790,1000.0000,6',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,1508,1486,470),
('12',N'2020-06-22T00:00:00',1000.0000',HCST',99.9,1000.0000,12',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,15081486470),
('13',N'2020-06-22T00:00:00',1000.0000',HCST',99.9,1000.0000,12',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,15081486470),
('14',N'2020-06-22T00:00:00',1000.0000',HCST',99.9,1000.0000,12',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,15081486470),
('17',N'2020-08-15T00:00:00',750.0000',HCST',392.71,1000.0000,9',HCST',N'1995-01-01T00:00:00','SE21 8NZ',15000,1508,1472,449),
('17',N'2020-08-15T00:00:00',750.0000',HCST',392.71,1000.0000,9',HCST',N'1995-01-01T00:00:00','SE21 8NZ',15000,1508,1472,449),
('20',N'2020-07-30T00:00:00',800.0000',HCST',399.41000.0000,9',HCST',N'1985-03-12T00:00:00','EH21 6UH',210001491477500),
(无效,N'2020-08-05T00:00:00',1000.0000',HCST',790,1000.0000,12',HCST',N'1980-07-07T00:00:00',BD1 3LY',2000,1508,1481,470),
('37',N'2020-08-22T00:00:00',300.0000',HCST',792.4,1000.0000,6',HCST',N'1999-01-31T00:00:00','HG2 9DX',350001508,NULL,470),
('38',N'2020-08-19T00:00:00',1000.0000',HCST',790,1000.0000,12',HCST',N'1990-07-07T00:00:00','BD1 3LY',2000,1508,1481,470);
--DDL和样本数据填充,结束
声明@SubmittingFirm VARCHAR(20)='713984'
,@ReportCreationDate=GETDATE()
,@Cancellation VARCHAR(10)=“false”;
;使用XMLNAMESPACES('http://www.w3.org/2001/XMLSchema-instance'作为[xsi]
,默认“urn:fsa-gov-uk:MER:PSD006:1”)
挑选(
从@loans中选择前10名*
对于XML路径('r'),键入,根('ROOT'))
).query('
{sql:variable(“@SubmittingFirm”)}
{sql:variable(“@ReportCreationDate”)}
PSD006_713984_50
{sql:variable(“@SubmittingFirm”)}
713984_D000147827
{sql:variable(“@Cancellation”)}
{
对于$x in/root/r
返回{$x/*}
}
');
我尝试了各种变化,无法返回每次贷款显示核心项目的结果。请尝试以下操作 它展示了XQuery及其FLWOR表达式的强大功能 基于我对业务的有限理解,
元素也得到了关注
SQL
-- DDL and sample data population, start
DECLARE @loans TABLE ( [Transref] varchar(16), [TransactionDate] date, [OriginalAdvance] money, [LoanType] varchar(4), [ContractualAPR] float(8), [OriginalProjectedTotalRepayable] money, [OriginalTerm] int, [ReasonforLoan] varchar(4), [DOB] date, [Postcode] varchar(8), [Salary] int, [SalaryFrequency] int, [ResidentialStatus] int, [EmploymentStatus] int);
INSERT INTO @Loans
VALUES
( '11', N'2020-06-22T00:00:00', 300.0000, 'HCST', 790, 1000.0000, 6, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '12', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '13', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '14', N'2020-06-22T00:00:00', 1000.0000, 'HCST', 99.9, 1000.0000, 12, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 20000, 1508, 1486, 470 ),
( '17', N'2020-08-15T00:00:00', 750.0000, 'HCST', 392.71, 1000.0000, 9, 'HCST', N'1995-01-01T00:00:00', 'SE21 8NZ', 15000, 1508, 1472, 449 ),
( '17', N'2020-08-15T00:00:00', 750.0000, 'HCST', 392.71, 1000.0000, 9, 'HCST', N'1995-01-01T00:00:00', 'SE21 8NZ', 15000, 1508, 1472, 449 ),
( '20', N'2020-07-30T00:00:00', 800.0000, 'HCST', 399.4, 1000.0000, 9, 'HCST', N'1985-03-12T00:00:00', 'EH21 6UH', 21000, 1499, 1477, 500 ),
( NULL, N'2020-08-05T00:00:00', 1000.0000, 'HCST', 790, 1000.0000, 12, 'HCST', N'1980-07-07T00:00:00', 'BD1 3LY', 2000, 1508, 1481, 470 ),
( '37', N'2020-08-22T00:00:00', 300.0000, 'HCST', 792.4, 1000.0000, 6, 'HCST', N'1999-01-31T00:00:00', 'HG2 9DX', 35000, 1508, NULL, 470 ),
( '38', N'2020-08-19T00:00:00', 1000.0000, 'HCST', 790, 1000.0000, 12, 'HCST', N'1990-07-07T00:00:00', 'BD1 3LY', 2000, 1508, 1481, 470 );
-- DDL and sample data population, end
DECLARE @SubmittingFirm VARCHAR(20) = '713984'
, @ReportCreationDate DATE = GETDATE()
, @Cancellation VARCHAR(10) = 'false';
;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' AS [xsi]
, DEFAULT 'urn:fsa-gov-uk:MER:PSD006:1')
SELECT (
SELECT * FROM @loans ORDER BY Transref
FOR XML PATH('r'), TYPE, ROOT('root')
).query('<PSD006-ShortTermLoans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD006:1 PSD006-Schema.xsd"
xmlns="urn:fsa-gov-uk:MER:PSD006:1">
<PSDFeedHeader>
<Submitter>
<SubmittingFirm>{sql:variable("@SubmittingFirm")}</SubmittingFirm>
</Submitter>
<ReportDetails>
<ReportCreationDate>{sql:variable("@ReportCreationDate")}</ReportCreationDate>
<ReportIdentifier>PSD006_713984__50</ReportIdentifier>
</ReportDetails>
</PSDFeedHeader>
{
for $x in /root/r
return <PSD006FeedMsg>
<CoreItems>
<FirmReferenceNumber>{sql:variable("@SubmittingFirm")}</FirmReferenceNumber>
<TransRef>{data($x/Transref)}</TransRef>
<Cancellation>{sql:variable("@Cancellation")}</Cancellation>
</CoreItems>
<ShortTermLoans>{$x/*[local-name(.) ne "Transref"]}</ShortTermLoans>
</PSD006FeedMsg>
}
</PSD006-ShortTermLoans>');
--DDL和样本数据填充,开始
声明@loans TABLE([Transref]varchar(16),[TransactionDate]date,[OriginalAdvance]money,[LoanType]varchar(4),[ContractualAPR]float(8),[OriginalProjectedTotalRepayable]money,[OriginalAlterm]int,[ReasonforLoan]varchar(4),[DOB]date,[Postcode]varchar(8),[Salary]int,[SalaryFrequency]int,[ResidentialStatus]int,[EmploymentStatus]int);
插入@Loans
价值观
('11',N'2020-06-22T00:00:00',300.0000',HCST',790,1000.0000,6',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,1508,1486,470),
('12',N'2020-06-22T00:00:00',1000.0000',HCST',99.9,1000.0000,12',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,15081486470),
('13',N'2020-06-22T00:00:00',1000.0000',HCST',99.9,1000.0000,12',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,15081486470),
('14',N'2020-06-22T00:00:00',1000.0000',HCST',99.9,1000.0000,12',HCST',N'1999-01-31T00:00:00','HG2 9DX',20000,15081486470),
('17',N'2020-08-15T00:00:00',750.0000',HCST',392.71,1000.0000,9',HCST',N'1995-01-01T00:00:00',SE21 8NZ',1500