2017-03-23 1 views
0

J'essaie de transmettre une valeur de paramètre à une fonction table ayant quatre paramètres et "renvoie la table". Cependant, je reçois l'erreur suivante lorsque je passe une valeur de paramètre à l'une de ses paramètre varchar:Passer un paramètre à une fonction table

Msg 8114, niveau 16, état 5, ligne 6 erreur de conversion de type de données varchar à bigint.

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

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

Glimpse à la fonction:

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) 

Répondre

1

Ici

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

Vous prenez une valeur en fonction de @ScenarioName. Ce sera soit le résultat de select ID from AEX.[dbo].[ConfigurationFieldTable] WHERE... ou le contenu de @ScenarioName.

Je suppose que cet ID est un bigint, tandis que votre @SenarioName est une chaîne. Et le s.ID vous voulez le comparer à - Je ne sais pas ...

Mais - pour être honnête - ma boule de cristal magique est dehors pour le nettoyage et l'information que vous fournissez n'est pas assez.

+0

Merci de m'avoir fait prendre conscience de mon erreur. Le scénarioID est une valeur entière et mon paramètre essaie de passer une valeur varchar. – NonProgrammer