2011-08-08 4 views
0
create function Fun12(@InsCd varchar) 
returns varchar(100) 
as 
begin 
declare @ret varchar(52) 
set @ret = (select [InsName] from [Assignment4].[dbo].[1466] 
    where rtrim(ltrim([InsCd]))= @InsCd) 
return @ret 
end 

exécution:pouvait-on me aider à trouver l'erreur avec SP

declare @r varchar(50) 
exec @r = dbo.Fun12 '436' 

select @r 

Je reçois la valeur NULL. Quelqu'un peut-il s'il vous plaît m'aider à trouver l'erreur?

Répondre

2

Vous devez spécifier une taille pour votre paramètre @InsCd.

Une chose comme ceci, mais vous pouvez utiliser une autre valeur que 20 en fonction de la taille du champ InsCd.

create function Fun12(@InsCd varchar(20)) 
+1

mais 'varchar (1)' est le meilleur type de données de tous les temps. Quelqu'un a-t-il déjà déterminé pourquoi 1 était manifestement la meilleure valeur par défaut? –

0

D'abord, vous devez vous assurer que le code contenu par la fonction retourne en fait quelque chose lorsque vous exécutez directement dans SQL Server Management Studio (SSMS):

-- SQL 
select InsName from [1466] where rtrim(ltrim([InsCd])) = '436'; 

Dans ce cas, j'utiliser un stocké procédure plutôt que d'une fonction. Vous pouvez également utiliser le profileur SSMS (Outils> Profiler) pour surveiller le trafic vers SQL Server. De cette façon, vous pouvez réellement voir ce qui est exécuté, voir les paramètres pour les SP, etc.

Questions connexes