2012-05-07 143 views
0

我只是將一些計算列添加到返回結果集的存儲過程中。我從C#/ .NET調用它。新列(對端)都返回值0。這裏是什麼,我回來的第一行,並在它下面的存儲過程:在SQL Server 2008 sprocs中不返回列別名'/計算列嗎?

Daily Pricing and Volume  5/4/2012 5229 5249 5256 0 0 


ALTER PROCEDURE [dbo].[spProcedureStatsCollectionCountComparisons] 

AS 

DECLARE @MaxDataDownloadDate date 

SET @MaxDataDownloadDate = dbo.MostRecentTradeDateForDataDownload() 

SELECT ProcedureName, TradeDate, LatestCount, PriorCount, AvgAllCounts, 
    ((LatestCount-PriorCount)/PriorCount) AS PctChgLatestVsPrior, 
    ((LatestCount-AvgAllCounts)/AvgAllCounts) AS PctChgLatestVsAvg 
FROM vwProcedureStatsCollectionCountComparisons 
WHERE TradeDate = @MaxDataDownloadDate 

我的問題是,我不能使用列別名'從存儲過程的結果集中,還是有一些其他問題在工作中,我錯過了?在此先感謝..

按照要求,相關的C#代碼:

SqlDataReader collectionCounts = dal.ProcedureStatsCollectionCountComparisons(); 
int rowCounter = 4; 
while (collectionCounts.Read()) 
{ 

    wkhst.Cells[rowCounter, 1] = collectionCounts["ProcedureName"]; 
    wkhst.Cells[rowCounter, 2] = collectionCounts["TradeDate"]; 
    wkhst.Cells[rowCounter, 3] = collectionCounts["LatestCount"]; 
    wkhst.Cells[rowCounter, 4] = collectionCounts["PriorCount"]; 
    wkhst.Cells[rowCounter, 5] = collectionCounts["AvgAllCounts"]; 
    wkhst.Cells[rowCounter, 6] = collectionCounts["PctChgLatestVsPrior"]; 
    wkhst.Cells[rowCounter, 7] = collectionCounts["PctChgLatestVsAvg"]; 

    rowCounter++; 
} 

excelApp.Visible = true; 
+0

向我們展示你的C#代碼。應該沒有問題,使用別名列 –

+0

謝謝,剛剛添加它。 – StatsViaCsh

+0

它必須是其他問題,我有SPs誰使用列別名在你的例子在2008年服務器,並且他們工作正常。你的*計數變量是什麼數據類型?他們可以是無符號類型,並且由於(LatestCount-PriorCount)的結果<0,它的計算結果爲0? – Treb

回答

2

按我的知識,並根據提供的數據,它是按預期工作。這是因爲,你在做下面的事情。

SELECT ((5229 - 5249)/5249) 

總是返回「0」,因爲第一個數字小於第二個數字。

編輯:

SELECT(CAST((5229 - 5249)AS FLOAT)/ CAST(5249 AS FLOAT))

+0

Praveen,謝謝,但它不是我所期望的。 ;)你知道如何從這些計算列中找回帶符號的小數嗎? – StatsViaCsh

+0

您可以將其轉換爲另一種數據類型:http://msdn.microsoft.com/en-us/library/ms187928(v=sql.105).aspx。拋出兩個* count變量,結果應該自動具有匹配的數據類型。 – Treb

+0

這樣做Praveen,謝謝。 – StatsViaCsh