【发布时间】:2010-07-02 14:23:16
【问题描述】:
我对 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 程序时返回的错误:
链接服务器“SvrLink”的 OLE CB 提供程序“MSDASQL”返回消息“(IBM)(CLI 驱动程序) (DB2/LINUXX8641) SQL0306N“@LTV_RANGE”在使用它的上下文中无效。SQLSTATE= 42703
消息 7350,第 16 级,状态 2,第 5 行 无法从链接服务器“SrvLinnk”的 OLE DB 提供程序“MSDASQL”获取列信息
【问题讨论】:
-
该函数是 SQL Server 函数吗?
-
是的,该函数是用户定义的 sql server 函数
-
它不会在 SQL Server 中以当前格式创建...
标签: tsql user-defined-functions