我有个报表,其中有明细项,也有小计项(某个明细项运算得到),而运算法则存储在另一个表里,比如小计项编号为20,则该表存储的信息是 20,18,16,3,+,- 意思就是说20=18+16-3
我现在是用游标处理的。
declare @Total Numeric(19,2) 
declare @Value Numeric(19,2)declare @param_1 int,@param_2 int, @param_3 int, @param_4 int, @param_5 int, @param_6 int, @param_7 int, @param_8 int
, @param_9 int, @param_10 int, @param_11 int, @param_12 int, @param_13 int, @param_14 int, @param_15 int, @param_16 int
, @param_17 int, @param_18 int, @param_19 int, @param_20 int
,@op_1 nvarchar(2),@OP_2 nvarchar(2), @OP_3 nvarchar(2), @OP_4 nvarchar(2), @OP_5 nvarchar(2), @OP_6 nvarchar(2), @OP_7 nvarchar(2), @OP_8 nvarchar(2)
, @OP_9 nvarchar(2), @op_10 nvarchar(2), @op_11 nvarchar(2), @op_12 nvarchar(2), @op_13 nvarchar(2), @op_14 nvarchar(2), @op_15 nvarchar(2), @op_16 nvarchar(2)
, @op_17 nvarchar(2), @op_18 nvarchar(2), @op_19 nvarchar(2)declare cur cursor for  --定义游标,获取公式及合计项--使用中间表@temp_year
select catid,name
,param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10
,param_11,param_12,param_13,param_14,param_15,param_16,param_17,param_18,param_19,param_20
,OP_1,OP_2,OP_3,OP_4,OP_5,OP_6,OP_7,OP_8,OP_9,OP_10
,OP_11,OP_12,OP_13,OP_14,OP_15,OP_16,OP_17,OP_18,OP_19
from ofrc  where subsum='Y' and templateid=18 and param_1>0
order by catidopen cur
fetch next from cur into @ID,@Name,@param_1,@param_2, @param_3, @param_4, @param_5,@param_6,@param_7,@param_8  
,@param_9, @param_10, @param_11, @param_12, @param_13, @param_14, @param_15, @param_16  
,@param_17, @param_18, @param_19, @param_20,@op_1,@OP_2,@OP_3,@OP_4,@OP_5,@OP_6,@OP_7,@OP_8 
,@OP_9,@op_10,@op_11,@op_12,@op_13,@op_14,@op_15,@op_16,@op_17,@op_18,@op_19 
while @@fetch_status=0
begin
set @Total=0 --初始化变量值
set @Value=0 set @value=(select isnull(balance,0) from cfw1 where catid=@parem_1)
set @total=@value if @op_1 is not null
begin
set @value=(select isnull(balance,0) from cfw1 where catid=@parem_2)
set @total=@total+@op_1+@value
end其中@param带头代表我说的例子中的18,16,3 @op打头的变量存放的是运算符if @op_1 is not null
begin
set @value=(select isnull(balance,0) from cfw1 where catid=@parem_2)
set @total=@total+@op_1+@value
         end
现在问题是,我获得运算符之后,存放在变量中,如何用这个运算符连接两个变量??set @total=@total+@op_1+@value
这样肯定是不对的。

解决方案 »

  1.   

    set @total=ltrim(@total)+ltrim(@op_1)+ltrim(@value)
    print @total
      

  2.   


    你好,我测试结果有误declare @Total Numeric(19,2) 
    declare @Value Numeric(19,2)
    declare @op varchar(2)
    DECLARE @sql varchar(100)
    set @total=10
    set @value=10
    set @op='+'
    ----SET @TOTAL=@TOTAL+@OP+@VALUE
    --set @sql=CONVERT(VARCHAR(10),@total)+@op+CONVERT(VARCHAR(10),@value)
    --print @sql
    --EXEC (@SQL)
    set @total=ltrim(@total)+ltrim(@op)+ltrim(@value)
    print @total
    提示从数据类型 varchar 转换为 numeric 时出错。
    你去掉空格是什么意思?@total是数值,@op是字符型(加减乘除符号) 肯定不能相加啊?