表1 view_jsgs_value(实际是DATA表与公式表的JOIN视图)
sjsj   qybm   value1  value2 value3 .. jsgs
1999   XXXX   111     222    3333      value1 + value2
...
表2 jsgsb
f_name  jsgs
xxxx    value1 + value2 + yyyy
fdfd    xxxx + value2
yyyy    value1 - xxxx --这里其实就是死循环了,XXXX的公式中包括YYYY
...
CREATE PROCEDURE p_calc
@sjsj nvarchar(7),
@qybm nvarchar(9),
@jsgs nvarchar(2000),
@re decimal(20,2) out
 AS
declare @s nvarchar(4000)
select @s = ' select @re=' + @jsgs + ' from (select * from view_jsgs_value where sjsj = '+ '''' + @sjsj +
''''+   '  and  qybm = ' + '''' + @qybm + '''' + ') as a'
exec sp_executesql @s , N'@re decimal(20,2) out ' , @re out
if @@error <> 0     set @re = -10000
GO
上述存储过程中@jsgs是一个自定义公式,通过EXEC来计算执行结果,当JSGS错误时,会发生列名不存在的错误信息,虽然对最终结果无影响,但想捕捉该错误并屏蔽掉查询分析器的出错信息.
(因为数据已经存在,所以这里不考虑在创建前检测公式合法性的处理方法,只考虑补救方法)
另外,用什么方法把所有错误的公式查找出来(可能还设计到公式死循环的问题)