编写一个存储过程,如果数据库中有字段a(int),b(int),c(int),d(float)计算(a/b)*(所有项中c的乘积)存到d中
3个回答
展开全部
CREATE PROCEDURE SP_js
AS
set nocount on
select c into #TempTable from 要计算的表名 where 1=2
ALTER TABLE aa ADD id_Tempt int IDENTITY(1,1) PRIMARY KEY
insert into #TempTable select c from 要计算的表名--如果有条件加where
declare @TempID int
declare @intCount int
set @TempID=1
declare @c int
select @intCount =count(*) from #TempTable
where @TempID<=@intCount
begin
select @c=@c*c from #TempTable where id_Tempt =@TempID
set @TempID=@TempID+1
end
update 要计算的表名 set d=(a/b)* @c------------有条件就加 where
select * from 要计算的表名
drop table #TempTable
set nocount off
GO
-----------上述代码复制后执行,exec SP_js
-----------修改表名后即可实现,如果有条件加where 条件
-----------也可用游标实现,只是游标有时出现异常
AS
set nocount on
select c into #TempTable from 要计算的表名 where 1=2
ALTER TABLE aa ADD id_Tempt int IDENTITY(1,1) PRIMARY KEY
insert into #TempTable select c from 要计算的表名--如果有条件加where
declare @TempID int
declare @intCount int
set @TempID=1
declare @c int
select @intCount =count(*) from #TempTable
where @TempID<=@intCount
begin
select @c=@c*c from #TempTable where id_Tempt =@TempID
set @TempID=@TempID+1
end
update 要计算的表名 set d=(a/b)* @c------------有条件就加 where
select * from 要计算的表名
drop table #TempTable
set nocount off
GO
-----------上述代码复制后执行,exec SP_js
-----------修改表名后即可实现,如果有条件加where 条件
-----------也可用游标实现,只是游标有时出现异常
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在木有超出int.maxvalue的值的情况下可以 这样d=(float)(a/b)*)*(float)(所有项中c的乘积);
如果超出;了最大范围 那么久必须每个转换( 比如(float)c*(float)b);
希望对你有帮助哈
如果超出;了最大范围 那么久必须每个转换( 比如(float)c*(float)b);
希望对你有帮助哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道我这么算对不对,如果对存储过程如下
a b c d
1 2 3 12
3 5 2 14.4
5 1 4 120
create proc stored
as
begin
update 表名 set d=(a/b)*sum(c)
end
a b c d
1 2 3 12
3 5 2 14.4
5 1 4 120
create proc stored
as
begin
update 表名 set d=(a/b)*sum(c)
end
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询