2012-06-29 59 views
0

我想將SELECT TOP 1 ......的結果分配給我的SQL Server存儲過程中的局部變量。請在下面找到存儲過程的部分:SELECT @billingMeterID = TOP 1 bmt.BillingMeterTypeID不起作用

SELECT 
(
    SELECT @billingMeterID = TOP 1 bmt.BillingMeterTypeID 
    FROM SDP_BillingMeterType bmt 
    JOIN SDP_Series s ON s.SeriesID = bmt.SeriesID 
    WHERE s.EngineID = SDP_PricePointBase.EngineID 
) AS BillingMeterTypeID,     
dbo.fn_GetTotalStreetCost(EngineID, ProgramID, ConsumableTypeID, @billingMeterID) AS StreetCost, 
[PricePointBaseID] AS PricePointBaseID, 
(SELECT TOP 1 CountryID FROM SDP_Country) AS CountryID,-- Only US is considered for now 
dbo.fn_GetTotalStreetCost(EngineID, ProgramID, ConsumableTypeID, @billingMeterID) * 0.5 AS StatedCost 
@dummyCost AS StreetCostUSD, 
@dummyCost AS StreetCostEURO, 
@dummyCost AS StatedCostUSD, 
@dummyCost AS StatedCostEURO, 
@exchangeRateSourceID AS ExchangeRateSourceID -- populating dummy value as the source is unknown at present 
FROM SDP_PricePointBase 

回答

0

您需要將變量設置爲將使用它的select的單獨聲明中。

1
SELECT @billingMeterID = TOP 1 bmt.BillingMeterTypeID 
       FROM SDP_BillingMeterType bmt 
       JOIN SDP_Series s ON s.SeriesID = bmt.SeriesID 
       Join DP_PricePointBase on s.EngineID = SDP_PricePointBase.EngineID 

SELECT  @billingMeterID AS BillingMeterTypeID,     
      dbo.fn_GetTotalStreetCost(EngineID, ProgramID, ConsumableTypeID, 
      @billingMeterID) AS StreetCost, 
      [PricePointBaseID] AS PricePointBaseID, 
      (SELECT TOP 1 CountryID FROM SDP_Country) AS CountryID, 
      -- Only US is considered for now 
      dbo.fn_GetTotalStreetCost(EngineID, ProgramID, ConsumableTypeID, 
      @billingMeterID) * 0.5 AS StatedCost 
      @dummyCost AS StreetCostUSD, 
      @dummyCost AS StreetCostEURO, 
      @dummyCost AS StatedCostUSD, 
      @dummyCost AS StatedCostEURO, 
      @exchangeRateSourceID AS ExchangeRateSourceID 
      -- populating dummy value as the source is unknown at present         
      FROM SDP_PricePointBase 
0
SELECT @billingMeterID = TOP 1 bmt.BillingMeterTypeID

不工作,因爲它應該是

SELECT TOP 1 @billingMeterID = bmt.BillingMeterTypeID

此外,它不能在子查詢中使用。