Office中国论坛/Access中国论坛
标题: 帮助看看以下自定义函数 [打印本页]
作者: access2sql 时间: 2002-11-9 01:17
标题: 帮助看看以下自定义函数
-- 函数代码如下
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'。
-- -- 可是我已经声明了阿?
作者: HG 时间: 2002-11-9 03:10
CREATE FUNCTION fn_avg (@tbl as CHAR , @dte1 as datetime , @sum_fld as char, @id_fld as char)
這裡確實有錯,CHAR型變量,一定要有具體的長度才可以的。如char(3)等。
作者: access2sql 时间: 2002-11-9 04:41
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
-- 更改成这样可否?运行结果与第一次完全一致,看来问题不在长度上
作者: HG 时间: 2002-11-9 17:17
想起來了,from子句期望得到的是一個表的名字,而不是一個變量。這樣是絕對通不過的。
[此贴子已经被HG于2002-11-9 9:17:17编辑过]
作者: access2sql 时间: 2002-11-10 20:19
那我想做这样一个函数是绝对行不通的了?因为我有很多表要算移动平均,难道我每个表都要做一个函数吗?是不是太烦了?
作者: HG 时间: 2002-11-20 17:14
ACCEss2sql現在此問題解決了麼?
作者: luwa 时间: 2002-11-23 08:23
可以在access中临时生成想要用到的存储过程,不用每个表做一个.
作者: access2sql 时间: 2002-11-23 19:32
之所以ms推荐使用参数存储过程,是因为参数存储过程的好处是可以事先编译并优化,如果说我每次用alter 来改的话,参数存储过程的优势不就不存在了?我提出本贴的意思就是想创建一个公共的存储过程来执行上述查询
[此贴子已经被作者于2002-11-23 11:32:26编辑过]
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |