Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Problem with UDF parameters
Message
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Divers
Thread ID:
01020343
Message ID:
01020438
Vues:
28
Simon,

I'm not sure if it'll work but you can try
		
JOIN tradlive.dbo.marketmargin mg ON mg.marketcode=d.marketcode
	AND mg.clientcode = (CASE 
	WHEN EXISTS( SELECT marketcode FROM tradlive.dbo.marketmargin 
					WHERE marketcode=d.marketcode AND clientcode=@clientcode) 
		THEN @clientcode
	WHEN EXISTS(SELECT marketcode FROM tradlive.dbo.marketmargin
					WHERE marketcode=d.marketcode AND companycode = 
					(SELECT companycode FROM tradlive.dbo.clientmaster WHERE clientcode=@clientcode)		
		THEN (SELECT companycode FROM tradlive.dbo.clientmaster WHERE clientcode=@clientcode)
		ELSE 1 END)
>This is the function definition:
>create function fn_getmgcli (@cli int,@mkt int)
>RETURNS @margins TABLE (marketcode int primary key, mg_factor int, shrmgfactor int)
>
>AS
>BEGIN
>
>IF EXISTS(SELECT marketcode FROM tradlive.dbo.marketmargin WHERE marketcode=@mkt AND clientcode=@cli)
>	INSERT @margins
>	SELECT marketcode,mg_factor,shrmgfactor FROM tradlive.dbo.marketmargin
>	WHERE marketcode=@mkt AND clientcode=@cli
>ELSE
>	BEGIN
>	IF EXISTS(SELECT marketcode FROM tradlive.dbo.marketmargin
>		WHERE marketcode=@mkt AND companycode=(SELECT companycode FROM tradlive.dbo.clientmaster
>							WHERE clientcode=@cli))
>		INSERT @margins
>		SELECT marketcode,mg_factor,shrmgfactor
>		FROM tradlive.dbo.marketmargin
>		WHERE marketcode=@mkt AND companycode=(SELECT companycode FROM tradlive.dbo.clientmaster
>								WHERE clientcode=@cli)
>	ELSE
>		INSERT @margins
>		SELECT marketcode,mg_factor,shrmgfactor FROM tradlive.dbo.marketmargin
>			WHERE marketcode=@mkt AND companycode=1
>	END
>RETURN
>END		
>
>
>and this is part of the SELECT statement calling it:
>
>
>SELECT ...
>
>FROM tradlive.dbo.dealmaster d  WITH (NOLOCK) JOIN tradlive.dbo.marketmaster m  WITH (NOLOCK) ON d.marketcode=m.marketcode
>	JOIN tradlive.dbo.marketprice mp ON d.marketcode=mp.marketcode
>	JOIN tradlive.dbo.marketdate md ON d.marketcode=md.marketcode
>	JOIN tradlive.dbo.marketdesc mt ON d.marketcode=mt.marketcode
>	JOIN fn_getmgcli(@clientcode,d.marketcode) mg ON mg.marketcode=d.marketcode
>	JOIN tradlive.dbo.marketspread ms ON d.marketcode=ms.marketcode
>	JOIN tradlive.dbo.currencies y ON d.currcode=y.currcode
>	JOIN tradlive.dbo.clientmaster cm ON d.clientcode=cm.clientcode
>	JOIN tradlive.dbo.mktgroup g WITH (NOLOCK) ON g.groupcode=m.groupcode
>...
>
>The problem is that the column in the function call is prefixed 'd.' and SQL doesn't like doing that. I am currently converting the code to use a cursor to process the rows one by one, but that isn't really very clever.
>
>
--sb--
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform