MS SQLSERVER 通过创建存储过程,使用EXEC()函数计算字符串数学公式来替换计算列的方法:
如:表中有数、量、应结公式、实结公式四列,为字符型数学公式,我想把这四列的计算结果结算出来并写入到数计算值、量计算值、应结公式计算值、实结公式计算值。通过sql server创建存储过程并执行该过程的方法实现。
一、存储过程代码(sql server)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[clkz_shu_liang_yjgs_sjgs_CalcAndWrite_Access]
AS
BEGIN
SET NOCOUNT ON;
declare @sql varchar(max)
declare @bh varchar(max)
declare @shu_str varchar(max)
declare @liang_str varchar(max)
declare @yjgs_str varchar(max)
declare @sjgs_str varchar(max)
-- 声明游标
DECLARE C_Employees CURSOR FAST_FORWARD FOR
SELECT 编号,数,量,应结公式,实结公式
FROM 车辆开支
ORDER BY 编号;
OPEN C_Employees;
-- 取第一条记录
FETCH NEXT FROM C_Employees INTO @bh,@shu_str,@liang_str,@yjgs_str,@sjgs_str;
set @sql='DECLARE
@shu_val AS decimal(18,2),
@liang_val AS decimal(18,2),
@yjgs_val AS decimal(18,2),
@sjgs_val AS decimal(18,2);
select @shu_val='+@shu_str+';
select @liang_val='+@liang_str+';
select @yjgs_val='+@yjgs_str+';
select @sjgs_val='+@sjgs_str+';'
WHILE @@FETCH_STATUS=0
BEGIN
-- 操作
set @sql=@sql+'UPDATE 车辆开支 SET 数计算值=@shu_val,量计算值=@liang_val,应结公式计算值=@yjgs_val,实结公式计算值=@sjgs_val WHERE 编号='+@bh;
-- 取下一条记录
FETCH NEXT FROM C_Employees INTO @bh,@shu_str,@liang_str,@yjgs_str,@sjgs_str;
set @sql=@sql+'select @shu_val='+@shu_str+';
select @liang_val='+@liang_str+';
select @yjgs_val='+@yjgs_str+';
select @sjgs_val='+@sjgs_str+';'
END
-- 关闭游标
CLOSE C_Employees;
-- 释放游标
DEALLOCATE C_Employees;
exec(@sql)
END
二、运行存储过程(在企业管理器中运行),最快捷的运行方法:在存储过程名称上右键点击运行即可。
USE [sydweb]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[clkz_shu_liang_yjgs_sjgs_CalcAndWrite_Access]
SELECT 'Return Value' = @return_value
GO