字段1 字段2
54
26
15
57
.
.
.
69
36
87
95
28 63
如上面的这个表,数据是在不断增加的,不断计算字段1最后5个的平均值,并将平均值添加到字段2的最后一个记录。SQL语句应该怎样写。我在DELPHI里用。请各位大虾赐教。
54
26
15
57
.
.
.
69
36
87
95
28 63
如上面的这个表,数据是在不断增加的,不断计算字段1最后5个的平均值,并将平均值添加到字段2的最后一个记录。SQL语句应该怎样写。我在DELPHI里用。请各位大虾赐教。
你的插入语句是:insert tb (f1) values (xxx)
改为:
declare @id int,@d int
insert tb (f1) values (xxx)
set @id=scope_identity()
select @d=sum(f1) from (
select top 5 f1 from tb
order by fid desc
)
update tb set f2=@d/5 where fid=@id
)
update tb set f2=@d/5 where fid=@id
应改为:
) a
update tb set f2=@d/5 where fid=@id
我这样写了在SQL查询分析器里执行,显示如下错误信息:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: ')' 附近有语法错误。
这是为什么呢?
参数为什么不能用表名呢??
将表名传给参数@TableName
exec('update ' + @TableName + ' set PingJun = a.PJ from (SELECT AVG(ChengJi) as PJ FROM (SELECT TOP 5 ChengJi FROM ' + @TableName + ' ORDER BY MyId DESC) a')
Project Project1.exe raised exception class EOleException with message '第一行:'001'附近有语法错误。'. Process stopped. Use Step or Run to continue.(001为数据表名称)程序里我是这样调用的
JiLuShu:= IntToStr(RecordCount);
SQL.Add('exec mp_pjs ('''+TableName+''','''+JiLuShu+''')');存储过程
CREATE PROCEDURE mp_pjs (@TableName varchar(20),@JiLuShu int)
AS
DECLARE @d NUMERIC(6,2)
SELECT @d=AVG(ChengJi) FROM (
SELECT TOP 5 ChengJi FROM [@TableName]
ORDER BY MyId DESC
) a
UPDATE [@TableName] SET PingJun =@d WHERE MyId=@JiLuShu
烦请各位帮我一下,看看到底是哪儿错了
CREATE PROCEDURE mp_pjs (@TableName varchar(20),@JiLuShu int)
AS DECLARE @sql varchar(8000)
set @sql='
DECLARE @d NUMERIC(6,2)
SELECT @d=AVG(ChengJi) FROM (
SELECT TOP 5 ChengJi FROM '+@TableName+'
ORDER BY MyId DESC
) a
UPDATE '+@TableName+' SET PingJun =@d WHERE MyId='+@JiLuShu
exec(@sql)end
感谢sz_haitao这几天来对我的无私帮助,通过sz_haitao的指导和自己的学习,我将存储过程修改为如下时运行通过。
CREATE PROCEDURE mp_pjs
AS
DECLARE @I Int
SET @I=(SELECT COUNT(MyId) FROM 001)
If @I >= 5
Begin
DECLARE @d NUMERIC(6,2)
SELECT @d=AVG(ChengJi) FROM (
SELECT TOP 5 ChengJi FROM 001
ORDER BY MyId DESC
) a
UPDATE 001 SET PingJun =@d WHERE MyId=@I
End
但我将存储过程写为如下:
CREATE PROCEDURE mp_pjs (@TableName varchar(20))
AS
DECLARE @I Int
SET @I=(SELECT COUNT(MyId) FROM [@TableName])
If @I >= 5
Begin
DECLARE @d NUMERIC(6,2)
SELECT @d=AVG(ChengJi) FROM (
SELECT TOP 5 ChengJi FROM [@TableName]
ORDER BY MyId DESC
) a
UPDATE [@TableName] SET PingJun =@d WHERE MyId=@I
End
执行过程
在值的地方填入001
服务器: 消息 208,级别 16,状态 1,过程 mp_pjs,行 4
对象名 '@TableName' 无效。
希望大家能再给予指点和帮助。
owner下显示为dbo
执行过程值的地方填入dbo.001
依然显示“对象名 '@TableName' 无效。”
Execsql;
Project Project1.exe raised exception class EOleException with message '未能找到存储过程'mp_pjs'。'SQL.Add('exec mp_pjs '('+TableName+')');
Execsql;
Project Project1.exe raised exception class EOleException with message '第1行:'001'附近有语法错误。'SQL.Add('exec mp_pjs ('''+TableName+''')');
Execsql;
Project Project1.exe raised exception class EOleException with message '第1行:'001'附近有语法错误。'