为什么函数名不可以识别?谁牛,告诉我原因

cityeremite 2003-08-19 11:23:08
我自己写了个SQL的函数,但是调用的时候必须加前缀“dbo.”否则就说函数名不可识别,我用“sp_helptext”能取的函数的内容,谁知道为什么??
...全文
215 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yujohny 2003-09-26
  • 打赏
  • 举报
回复
还不明白,既然是用户自定义函数
你当然要让SQL知道是调用谁的函数,所以函数前面要加上所有者
cityeremite 2003-09-26
  • 打赏
  • 举报
回复
呵呵,谢谢各位,虽然还是没怎么搞明白
CrazyFor 2003-08-19
  • 打赏
  • 举报
回复
没办法,必须加.
hjb111 2003-08-19
  • 打赏
  • 举报
回复
调用用户定义函数
当调用标量用户定义函数时,必须提供至少由两部分组成的名称:

SELECT *, MyUser.MyScalarFunction()
FROM MyTable

可以使用一个部分构成的名称调用表值函数:

SELECT *
FROM MyTableFunction()

然而,当调用返回表的 SQL Server 内置函数时,必须将前缀 :: 添加至函数名:

SELECT * FROM ::fn_helpcollations()

可在 Transact-SQL 语句中所允许的函数返回的相同数据类型表达式所在的任何位置引用标量函数,包括计算列和 CHECK 约束定义。例如,下面的语句创建一个返回 decimal 的简单函数:

CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
(@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
@CubeHeight decimal(4,1) )
RETURNS decimal(12,3) -- Cubic Centimeters.
AS
BEGIN
RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END

然后可以在允许整型表达式的任何地方(如表的计算列中)使用该函数:

CREATE TABLE Bricks
(
BrickPartNmbr int PRIMARY KEY,
BrickColor nchar(20),
BrickHeight decimal(4,1),
BrickLength decimal(4,1),
BrickWidth decimal(4,1),
BrickVolume AS
(
dbo.CubicVolume(BrickHeight,
BrickLength, BrickWidth)
)
)

dbo.CubicVolume 是返回标量值的用户定义函数的一个示例。RETURNS 子句定义由该函数返回的值的标量数据类型。BEGIN...END 块包含一个或多个执行该函数的 Transact-SQL 语句。该函数中的每个 RETURN 语句都必须具有一个参数,可返回具有在 RETURNS 子句中指定的数据类型(或可隐性转换为 RETURNS 中指定类型的数据类型)的数据值。RETURN 参数的值是该函数返回的值。

txlicenhe 2003-08-19
  • 打赏
  • 举报
回复
没办法,加一下也不麻烦,忍了吧。
hjb111 2003-08-19
  • 打赏
  • 举报
回复
当然需要了,微软公司就这么规定的!
liuyun2003 2003-08-19
  • 打赏
  • 举报
回复
兄弟和微软商量一下,看看能不能改。
happydreamer 2003-08-19
  • 打赏
  • 举报
回复
是这样的啊
chump 2003-08-19
  • 打赏
  • 举报
回复
这是系统规定啊!
zjcxc 2003-08-19
  • 打赏
  • 举报
回复
目前的版本规定要这样调用 .
z5wjz 2003-08-19
  • 打赏
  • 举报
回复
查询用户自定义的标量函数时必须加上所有者

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧