Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xQuery以XML格式获取SQL结果_Sql_Sql Server_Xml_Xquery - Fatal编程技术网

使用xQuery以XML格式获取SQL结果

使用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

我希望以以下示例格式生成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">
 <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