PB没有宏替换,如果公式不多,可以改成函数试试,或者写一个通用函数来包括绝大多数的公式。如:m1:(@a+@b)/2, m2:(@b*@c)/2 function f_name(long a,long b,log c) if 公式名=m1 then f_name(100,200,0)=150 if 公式名=m2 then f_name(0,30,20)=300
我对你这个想法感到有些不可想象!真的!很佩服你的想法! 不过我有一个方法!可以完成你的要求! 就是用动态的sql! 第一 你的目的如果是要动态的改变表达式!我的方法可以! 第二 你的目的主要是对数据库的操作我的方法也可以! 第三 你的变量要用字段代替! 例如 表1 k a int b int 12 4 8 9 (说明:k是表名) 表2 m tablename varchar(10) jisuan varchar(10) k (a+b)/2 (说明:m是表名) select @jisuan=jisuan from m where tablename='k' Select @sql='select a,b,' +@jisuan+' from k' exec(@sql)
to ww1007 您的想法让我开阔了思路,非常感谢,但是我的这些数据都是临时的 没有必要放到数据库,我已经用sp_executesql完成了计算,但是 在中间变量的传递上不太如意,因为我才刚开始接触sql。 比如,你上面的select @jisuan=jisuan from m where tablename='k'句子 当我使用sp_executesql时,类似@jisuan这样的变量如何传递出来呢?
function f_name(long a,long b,log c)
if 公式名=m1 then f_name(100,200,0)=150
if 公式名=m2 then f_name(0,30,20)=300
SQL是支持字符串累加。
只要变量总数和类型可以固定,在函数中可以操作公式表的记录,对公式进行分析吗。
谁说普通用户使用SQL了.
例如你可以让他录入公式假如为S="a+b*a-b/a+a*b"
你的SQL="select "+S+"from table"
是的,但是不知道如何将这些变量宏替换成数值,然后运算
2.无
3.否
4.是,都是real
如果变量名、变量数量不固定,至少需要事先知道。
sql_executesql 中的变量是否可以回传
不过我有一个方法!可以完成你的要求!
就是用动态的sql!
第一 你的目的如果是要动态的改变表达式!我的方法可以!
第二 你的目的主要是对数据库的操作我的方法也可以!
第三 你的变量要用字段代替!
例如 表1 k a int b int
12 4
8 9
(说明:k是表名)
表2 m tablename varchar(10) jisuan varchar(10)
k (a+b)/2
(说明:m是表名)
select @jisuan=jisuan from m where tablename='k'
Select @sql='select a,b,' +@jisuan+' from k'
exec(@sql)
您的想法让我开阔了思路,非常感谢,但是我的这些数据都是临时的
没有必要放到数据库,我已经用sp_executesql完成了计算,但是
在中间变量的传递上不太如意,因为我才刚开始接触sql。
比如,你上面的select @jisuan=jisuan from m where tablename='k'句子
当我使用sp_executesql时,类似@jisuan这样的变量如何传递出来呢?
没有查到相关的说明,但按照存储过程的参数定义形式, 哈哈~~~~!!!如下:declare @css nchar(100), @bb intselect @bb = 29select @css = N'select @c = (@a+@b)/2'exec sp_executesql @css, N'@a int, @b int, @c int output', 10, 29, @bb outputselect @bb as bb
我没有话了
select @cmd = a where b = '...'
replace(@CMD, '@a' , '...')
replace(@CMD, '@b' , '...')
非常感谢,我已经完成了。