Я все еще новичок в функциях SQL. Я пытаюсь понять, как правильно использовать в программе SQL. Я хочу протестировать скалярные UDF, которые я создал, чтобы убедиться, что они правильно возвращают данные и могут возвращать большое количество данных по порядку. Я не уверен, что не так с моим синтаксисом в SQL для использования функции, так как это моя первая попытка. Может ли кто-нибудь направить меня в правильном направлении?
Вот пример.
Код функции:
SET ANSI_NULLS_ON
GO
GET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION dbo.FN_LTV_Ranges
(
@LTV_RANGE decimal(4,3)
)
Returns variable (160
as
Begin
declare @Return varchar(16)
select @Return =
Case
When @LTV_Range is NULL then 'Missing'
When @LTV_Range is 00.00 then 'Missing'
When @LTV_Range <= 0.75 then '<=0.75'
When @LTV_Range between 0.75 and 0.80 then '75-80'
When @LTV_Range between 0.80 and 0.90 then '80-90'
When @LTV_Range between 0.90 and 1.00 then '90-100'
When @LTV_Range >= 100 then '100+'
else null end
Return &Return
END
вот программа SQL для вызова и проверки вышеуказанной функции:
declare @LTV_Range decimal(4,3)
Select top 600 s.LNumber
from OPENQUERY (SvrLink, '
Select Lnumber, dbo.FN_LTV_Range(@LTV_Range)
from some_table s
where s.LNumber > '0'
group by @LTV_Range
Order by @LTV_Range
for Fetch only with UR')
Вот ошибка, возвращаемая при попытке запустить программу SQL:
Поставщик OLE CB "MSDASQL" для связанного сервера "SvrLink" вернул сообщение "(IBM)(драйвер CLI) (DB2/LINUXX8641) SQL0306N "@LTV_RANGE" недействителен в контексте, где он используется. SQLSTATE= 42703
Сообщение 7350, уровень 16, состояние 2, строка 5. Не удается получить информацию о столбце от поставщика OLE DB «MSDASQL» для связанного сервера «SrvLinnk».