2017-03-23 71 views
0

我想將一個參數值傳遞給一個具有四個參數和「返回表」的表值函數。然而,當我的參數值傳遞給它的VARCHAR參數之一,收到以下錯誤:將參數傳遞給一個表值函數

消息8114,級別16,狀態5,第6行誤差變換數據類型爲varchar 爲bigint。

declare @Scenario1 as varchar(30) 
set @Scenario1 = '2017_B01' 

select * 
From  [dbo].[fn_GetAEAssumptionFacts](@Scenario1,null,null,null) fng 

一瞥功能:

CREATE FUNCTION [dbo].[fn_GetAEAssumptionFacts] 

(
    @pScenarioName varchar(500) = NULL 
    ,@pBuildingID varchar(500) = NULL 
    ,@pLeaseID varchar(500) = NULL 
    ,@pTenantName varchar(500) = NULL 
) 

RETURNS TABLE 
AS 
RETURN 

select 
..... 
from ae11.dbo.rvw_FinancialLineItems fli 
.... 
INNER JOIN ae11.dbo.rvw_Scenarios s on s.Id = pas.ScenarioId 
left join 
    (select 
     externalID, 
     PropertyAssetId, 
     LeaseID, 
     BeginDate 
    from ae11.dbo.ivw_Leases 
    WHERE PropertyAssetID IN 
    (select ID from AE11.dbo.PropertyAssets where scenarioID = 
    (CASE WHEN isnull(@pScenarioName, '') = '' 
        THEN (select ID from AEX.[dbo].[ConfigurationFieldTable] 
        where [Type] = 'Lease Connect Current Scenario') 
       ELSE @pScenarioName 
       END) 
    ) 
    ) lea 
ON lea.LeaseID = uni.ExternalID 
AND lea.PropertyAssetID = uni.PropertyAssetId    

where 1=1 
...... 
    AND s.id = (CASE WHEN isnull(@pScenarioName, '') = '' 
        THEN (select ID from AEX.[dbo].[ConfigurationFieldTable] 
        where [Type] = 'Lease Connect Current Scenario') 
       ELSE @pScenarioName 
       END) 

回答

1

這裏

(CASE WHEN isnull(@pScenarioName, '') = '' 
       THEN (select ID from AEX.[dbo].[ConfigurationFieldTable] 
       where [Type] = 'Lease Connect Current Scenario') 
      ELSE @pScenarioName 
END) 

您正在根據@ScenarioName的值。這可能是select ID from AEX.[dbo].[ConfigurationFieldTable] WHERE...的結果或@ScenarioName的內容。

我假設這個ID是bigint,而你的@SenarioName是一個字符串。而s.ID你想比較它 - 我不知道...

但 - 說實話 - 我的魔力球球清理和你提供的信息是不夠的。

+0

謝謝你讓我意識到我的錯誤。 scenarioID是一個整數值,我的參數正在嘗試傳遞一個varchar值。 – NonProgrammer

相關問題