设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2815|回复: 7
打印 上一主题 下一主题

帮助看看以下自定义函数

[复制链接]
跳转到指定楼层
1#
发表于 2002-11-9 01:17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
-- 函数代码如下

IF EXISTS (SELECT *
           FROM   sysobjects
           WHERE  name = N'fn_avg')
        DROP FUNCTION fn_avg
GO
CREATE FUNCTION fn_avg        (@tbl as CHAR , @dte1 as datetime , @sum_fld as char, @id_fld as char)
RETURNS money
AS
BEGIN
return (select avg(@sum_fld) as ddd from @tbl where @id_fld <= @dte1 )
END
GO

-- --提示为错误为:
-- 服务器: 消息 137,级别 15,状态 2,过程 fn_avg,行 5
-- 必须声明变量 '@tbl'。
-- -- 可是我已经声明了阿?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2002-11-9 03:10:00 | 只看该作者
CREATE FUNCTION fn_avg (@tbl as CHAR , @dte1 as datetime , @sum_fld as char, @id_fld as char)
這裡確實有錯,CHAR型變量,一定要有具體的長度才可以的。如char(3)等。
3#
 楼主| 发表于 2002-11-9 04:41:00 | 只看该作者
IF EXISTS (SELECT *
  FROM sysobjects
  WHERE name = N'fn_avg')
DROP FUNCTION fn_avg
GO
CREATE FUNCTION fn_avg (@tbl as CHAR(30) , @dte1 as datetime , @sum_fld as char(30), @id_fld as char(30))
RETURNS money
AS
BEGIN
return (select avg(@sum_fld) as ddd from @tbl where @id_fld <= @dte1 )
END
GO

-- 更改成这样可否?运行结果与第一次完全一致,看来问题不在长度上
4#
发表于 2002-11-9 17:17:00 | 只看该作者
想起來了,from子句期望得到的是一個表的名字,而不是一個變量。這樣是絕對通不過的。

[此贴子已经被HG于2002-11-9 9:17:17编辑过]

5#
 楼主| 发表于 2002-11-10 20:19:00 | 只看该作者
那我想做这样一个函数是绝对行不通的了?因为我有很多表要算移动平均,难道我每个表都要做一个函数吗?是不是太烦了?
6#
发表于 2002-11-20 17:14:00 | 只看该作者
ACCEss2sql現在此問題解決了麼?
7#
发表于 2002-11-23 08:23:00 | 只看该作者
可以在access中临时生成想要用到的存储过程,不用每个表做一个.
8#
 楼主| 发表于 2002-11-23 19:32:00 | 只看该作者
之所以ms推荐使用参数存储过程,是因为参数存储过程的好处是可以事先编译并优化,如果说我每次用alter 来改的话,参数存储过程的优势不就不存在了?我提出本贴的意思就是想创建一个公共的存储过程来执行上述查询


[此贴子已经被作者于2002-11-23 11:32:26编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 17:28 , Processed in 0.086671 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表