Использование функции при update

TimurFromAnotherComp
Дата: 10.12.2002 12:51:20
Почему не работает?

update d 

set d.FromAmount = (select FromAmount from dbo.fnGetCurrRate(d.RateID, 2, '01.01.2002')),
d.ToAmount = (select ToAmount from dbo.fnGetCurrRate(1,2,'01.01.2000'))
from Docs d
where isnull(CurrencyID,0) = 0 and isnull(RateID,0) = 0


А так - работает ?
update d 

set d.FromAmount = (select FromAmount from dbo.fnGetCurrRate(1, 2, '01.01.2002')),
d.ToAmount = (select ToAmount from dbo.fnGetCurrRate(1,2,'01.01.2000'))
from Docs d
where isnull(CurrencyID,0) = 0 and isnull(RateID,0) = 0


Разница в параметрах, которые передаются функции.
В первом случае пытаюсь в качестве параметров использовать данные строки которую Updat-ю (не работает!!) во втором - параметры константы (работает!!)
Почему?!!
DmitryV
Дата: 10.12.2002 13:44:09
Привет!
А как не работает - ошибку дает или делает не то?

Удачи
snake
Дата: 10.12.2002 14:37:10
функции должны быть скалярными, а не табличного типа.
SergSuper
Дата: 10.12.2002 14:46:25
или как-то так надо писать:

update d
set FromAmount =f.FromAmount ,
ToAmount = f.ToAmount
from Docs d, dbo.fnGetCurrRate(1,2,'01.01.2000') f
where isnull(CurrencyID,0) = 0 and isnull(RateID,0) = 0
TimurFromAnotherComp
Дата: 10.12.2002 15:35:57
"функции должны быть скалярными, а не табличного типа"
Так ведь она в первом случае не работает, а во втором работает, хотя и табличного типа. Почему?
VVG_
Дата: 10.12.2002 15:40:18
Потому что в качестве параметров поля таблицы можно использовать только для саклярных функций.

Можно извратнуться и обернуть вызов табличной функции в скалярную, тогда должно пройти.
Тимур
Дата: 10.12.2002 17:14:03
Спасибо.