0

查询是按货币分组的前 500 个帐户余额的总和,用于来自新 SQL 2012 服务器和现有服务器的比较查询,以验证新 2012 服务器中没有变化。

设置超时属性为 |set option|command|900| 并无济于事。

以下是错误的摘录:

System.Data.SqlClient.SqlException (0x80131904):超时已过期。在操作完成之前超时时间已过或服务器没有响应。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlDataReader.SetMetaData(_SqlMetaDataSet metaData, Boolean moreInfo) 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在系统.Data.SqlClient.SqlDataReader。

我试图将要检查的行数从 500 减少到 300,这似乎可行,但是大型数据集将是突出任何差异的理想选择。

我也在考虑将查询更改为其他内容,以将其分解为较小的结果集或创建替代

查询如下,如果有人有更好的解决方案来优化查询:

       select 
       TOP 1000 fab.DateKey,be.BK_ActOId,be.PtId,be.PDesc,
       be.OId,be.ODesc,be.SubOId,be.SubODesc,
       rc.Currency,SUM(CASE WHEN rc.Currency = '_NA' THEN FAB.Balance ELSE 0 END) as       bal_OrigCcy
       ,SUM(CASE WHEN rc.Currency = 'AUD' THEN FAB.Balance ELSE 0 END) as bal_AUD
       ,SUM(CASE WHEN rc.Currency = 'GBP' THEN FAB.Balance ELSE 0 END) as bal_GBP
       ,SUM(CASE WHEN rc.Currency = 'SGD' THEN FAB.Balance ELSE 0 END) as bal_SGD
       ,SUM(CASE WHEN rc.Currency = 'USD' THEN FAB.Balance ELSE 0 END) as bal_USD 
       from olap.v_FactAccB fab 
       inner join OLAP.v_DimCur dc on dc.CurrencyKey = fab.BalanceCurrencyKey 
       inner join olap.v_DimReportingCur rc on rc.CurrencyKey =          fab.ReportingCurrencyKey 
       inner join OLAP.v_DimBusinessEntity be on be.BusinessEntityKey = fab.BusinessEntityKey 
     and rc.Currency in ('_NA', 'AUD', 'GBP', 'SGD','USD') 
     and fab.DateKey = 20130912 
     and fab.PlatformKey = 1 
     group by fab.DateKey, be.BK_ActOId, be.PId, be.PDesc
    ,be.OId, be.ODesc, be.SubOId, be.SubODesc, rc.Currency 
     order by fab.DateKey, be.BK_ActOId, be.PId, be.PDesc, be.OId, be.ODesc, be.SubOId,    be.SubODesc, rc.Curr

有没有人有上述以外的替代品

4

1 回答 1

0

我会重写您的查询以使用 aPIVOT而不是重复的SUM(CASE... )

例如:

 select * from yourtable
pivot (SUM(balance) for currency in (_NA,AUD,GBP,SGD,USD)) p
于 2013-10-09T11:06:05.157 回答