Sql server 2008 对于没有来自的XML
我继承了一个1500行的存储过程,它声明了大量变量,这些变量在过程的整个生命周期中经常改变状态。我们有一个逻辑错误,它被证明是极难跟踪的,因此我们的任务是在有限的时间内将变量写入日志表。我的解决方案是将每个变量都放入XML中,并将它们记录在一个没有索引的表中,以便在写入过程中尽可能快地完成。这是一个最后的手段,但我们有一百万美元的谨慎骑在一个解决方案,而不是很多时间去挖掘 因此,在我们运行过程的一周内,解决方案将是这样的:Sql server 2008 对于没有来自的XML,sql-server-2008,tsql,Sql Server 2008,Tsql,我继承了一个1500行的存储过程,它声明了大量变量,这些变量在过程的整个生命周期中经常改变状态。我们有一个逻辑错误,它被证明是极难跟踪的,因此我们的任务是在有限的时间内将变量写入日志表。我的解决方案是将每个变量都放入XML中,并将它们记录在一个没有索引的表中,以便在写入过程中尽可能快地完成。这是一个最后的手段,但我们有一百万美元的谨慎骑在一个解决方案,而不是很多时间去挖掘 因此,在我们运行过程的一周内,解决方案将是这样的: 过程将数据声明并初始化为变量 函数被调用以记录状态 这个过程会进行更多
- 过程将数据声明并初始化为变量
- 函数被调用以记录状态
- 这个过程会进行更多的代码更改状态
- 函数被调用以记录状态
- 程序做的更多
- 函数被调用以记录状态
DECLARE @TESTSTRING VARCHAR(MAX)
DECLARE @TESTINTEGER INT
DECLARE @TESTDATE DATETIME = GETDATE()
SELECT @TESTSTRING, @TESTINTEGER, @TESTDATE FOR XML...
通过某种方式像这样选择变量,我可以将变量输出为XML吗?我知道FOR XML语法通常要求它位于FROM子句之后。在这种情况下,我不会有。如果不是这样的话。。。这个有多贵
DECLARE @TESTSTRING VARCHAR(MAX)
DECLARE @TESTINTEGER INT
DECLARE @TESTDATE DATETIME = GETDATE()
SELECT
*
FROM
(SELECT @TESTSTRING AS TESTSTRING, @TESTINTEGER AS TESTINTEGER, @TESTDATE AS TESTDATE) AS S
FOR XML PATH('VAR'), ROOT('TESTTABLE')
虽然只要所选变量具有别名,就可以跳过子查询,但这样做很好。另外,考虑如何使用ISNULL函数来表示XML中的空参数值。
以下是我所做工作的非抽象内容。工作完美。我已经为希帕取消了一切
<TESTTABLE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VAR>
<ClaimID>SOMECLAIMID</ClaimID>
<CoreClaimTotalPaid xsi:nil="true" />
<ClaimTotalAmt xsi:nil="true" />
<MemID xsi:nil="true" />
<CLMStartDate xsi:nil="true" />
<CLMEndDate xsi:nil="true" />
<MonthlyCostShareID xsi:nil="true" />
<MonthlyCostShareIDRollback xsi:nil="true" />
<MonthlyCostShareAmt xsi:nil="true" />
<MonthlyShareAmtUsed xsi:nil="true" />
<MonthlyCostShareRateCode xsi:nil="true" />
<SOCBalance xsi:nil="true" />
<CDTotalPaid xsi:nil="true" />
<CDTotalSOC xsi:nil="true" />
<PROC_USER xsi:nil="true" />
<CostShareClaimID xsi:nil="true" />
<AdjudicatedCostShareAmtApplied xsi:nil="true" />
<PrevSOCAmt xsi:nil="true" />
<totalpaid xsi:nil="true" />
<Message xsi:nil="true" />
<getdate xsi:nil="true" />
<IHCMFPcutoff xsi:nil="true" />
</VAR>
</TESTTABLE>
以及XML:
索姆克莱米德
我没有把它放在我的示例中,但我将添加元素XSINIL,它将只保留空值。我不太担心初始化,就像您在示例中所做的那样。但我应该说明。感谢您的快速回复!事实上,这确实回答了我的问题。刚刚尝试了@outputxml变量的一个变体。非常感谢你!
DECLARE @CLAIMID VARCHAR(MAX) = 'SOMECLAIMID'
DECLARE @CoreClaimTotalPaid MONEY
DECLARE @ClaimTotalAmt MONEY
DECLARE @MemID CHAR(15)
DECLARE @CLMStartDate DATETIME
DECLARE @CLMEndDate DATETIME
DECLARE @MonthlyCostShareID INT
DECLARE @MonthlyCostShareIDRollback INT
DECLARE @MonthlyCostShareAmt MONEY
DECLARE @MonthlyShareAmtUsed MONEY
DECLARE @MonthlyCostShareRateCode CHAR(2)
DECLARE @SOCBalance MONEY
DECLARE @CDTotalPaid MONEY
DECLARE @CDTotalSOC MONEY
DECLARE @PROC_USER CHAR(15)
DECLARE @CostShareClaimID INT
DECLARE @AdjudicatedCostShareAmtApplied MONEY
DECLARE @PrevSOCAmt MONEY
DECLARE @totalpaid MONEY
DECLARE @Message varchar(200)
DECLARE @getdate DATETIME
DECLARE @IHCMFPcutoff SMALLDATETIME
SELECT @CLAIMID ClaimID,@CoreClaimTotalPaid CoreClaimTotalPaid,@ClaimTotalAmt ClaimTotalAmt,@MemID MemID,@CLMStartDate CLMStartDate,@CLMEndDate CLMEndDate,
@MonthlyCostShareID MonthlyCostShareID,@MonthlyCostShareIDRollback MonthlyCostShareIDRollback,@MonthlyCostShareAmt MonthlyCostShareAmt,
@MonthlyShareAmtUsed MonthlyShareAmtUsed,@MonthlyCostShareRateCode MonthlyCostShareRateCode,@SOCBalance SOCBalance,@CDTotalPaid CDTotalPaid,
@CDTotalSOC CDTotalSOC,@PROC_USER PROC_USER,@CostShareClaimID CostShareClaimID, @AdjudicatedCostShareAmtApplied AdjudicatedCostShareAmtApplied,
@PrevSOCAmt PrevSOCAmt,@totalpaid totalpaid,@Message [Message],@getdate [getdate],@IHCMFPcutoff IHCMFPcutoff
FOR XML PATH('VAR'), ROOT('TESTTABLE'), ELEMENTS XSINIL
<TESTTABLE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VAR>
<ClaimID>SOMECLAIMID</ClaimID>
<CoreClaimTotalPaid xsi:nil="true" />
<ClaimTotalAmt xsi:nil="true" />
<MemID xsi:nil="true" />
<CLMStartDate xsi:nil="true" />
<CLMEndDate xsi:nil="true" />
<MonthlyCostShareID xsi:nil="true" />
<MonthlyCostShareIDRollback xsi:nil="true" />
<MonthlyCostShareAmt xsi:nil="true" />
<MonthlyShareAmtUsed xsi:nil="true" />
<MonthlyCostShareRateCode xsi:nil="true" />
<SOCBalance xsi:nil="true" />
<CDTotalPaid xsi:nil="true" />
<CDTotalSOC xsi:nil="true" />
<PROC_USER xsi:nil="true" />
<CostShareClaimID xsi:nil="true" />
<AdjudicatedCostShareAmtApplied xsi:nil="true" />
<PrevSOCAmt xsi:nil="true" />
<totalpaid xsi:nil="true" />
<Message xsi:nil="true" />
<getdate xsi:nil="true" />
<IHCMFPcutoff xsi:nil="true" />
</VAR>
</TESTTABLE>