我希望我的函数返回一个带有一些值的A表
我必须在更新中修复某些问题,但我不知道该怎么办。
以下是我的函数FngetTableH
的定义,
ALTER FUNCTION [dbo].[FnGetTableH]
(
@Date DateTime
)
RETURNS @Listeab_ Table(CLOSING_PRICE money,IdValeur int)
AS
BEGIN
Insert @Listeab_
( CLOSING_PRICE ,IdValeur)
select Distinct 0 , IdValeur
From Historique
Update @Listeab_
Set CLOSING_PRICE = (Select CLOSING_PRICE
from Historique H
inner join (Select MAX(@Date) As DATEDU,IdValeur FROM Historique
where
DATE_NEGO<= @Date
group by IdValeur ) L2
on
H.DATE_NEGO=L2.DATEDU
and
H.IdValeur=L2.IdValeur
)
return
END
当我执行此代码时
declare @Date date = '10/09/2013'
---select*from FnGetTableH(@Date)
select C.IdClient,H.IdValeur,C.RaisonSocial,SUM( case I.sens
WHEN 'c' then + I.Qantite
WHEN'd' then - I.Qantite
END) as 'Solde', H.closing_price
from Imputations I
Inner join FnGetTableH(@Date) H
on H.IdValeur=I.IdValeur
Inner join Clients C
on C.IdClient=I.IdClient
where I.DateImputation=@Date
group by C.IdClient,RaisonSocial,H.closing_price,H.IdValeur
Order by IdClient asc
我得到的错误是
Msg 512,Niveau 16,État1,Ligne 4 Lasous-requêtearetourné plusieurs valeurs。 Cela n'est pasautoriséquand lasous-requête西装 =,!=,<,<=,>,> =非常有效的表达方式。指令a.éréarrêtée。
英语翻译:
消息512,级别16,状态1,第4行子查询返回多个 价值观。当子查询后跟= ,!时,不允许这样做。 =,<,<=,>,> =或用作表达式时。该指令已停止。
答案 0 :(得分:0)
您的CLOSING_PRICE
在更新语句中很可能给出多条记录,请在查询中尝试top 1
。
尝试一下:
ALTER FUNCTION [dbo].[FnGetTableH]
(
@Date DateTime
)
RETURNS @Listeab_ Table(CLOSING_PRICE money,IdValeur int)
AS
BEGIN
Insert @Listeab_
( CLOSING_PRICE ,IdValeur)
select Distinct 0 , IdValeur
From Historique
Update @Listeab_
Set CLOSING_PRICE = (Select top 1 CLOSING_PRICE
from Historique H
inner join (Select MAX(@Date) As DATEDU,IdValeur FROM Historique
where
DATE_NEGO<= @Date
group by IdValeur ) L2
on
H.DATE_NEGO=L2.DATEDU
and
H.IdValeur=L2.IdValeur
)
return
END