如何判断EXEC执行的SQL语句的合法性

raymen 2008-01-14 09:57:10
表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错误时,会发生列名不存在的错误信息,虽然对最终结果无影响,但想捕捉该错误并屏蔽掉查询分析器的出错信息.
(因为数据已经存在,所以这里不考虑在创建前检测公式合法性的处理方法,只考虑补救方法)
另外,用什么方法把所有错误的公式查找出来(可能还设计到公式死循环的问题)
...全文
173 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
free1879 2008-01-14
  • 打赏
  • 举报
回复
帮顶 接分
rouqu 2008-01-14
  • 打赏
  • 举报
回复
接分
zhouchunyu 2008-01-14
  • 打赏
  • 举报
回复
帮顶
raymen 2008-01-14
  • 打赏
  • 举报
回复
厄,老大都说不行就算了.
另外:对于判断公式可能存在死循环部分怎么解决比较好?
zjcxc 元老 2008-01-14
  • 打赏
  • 举报
回复
这个不好弄, 2005 的 try catch 能够处理大部分错误, 但也不能处理全部错误.

所以一般放到程序中去处理好一些.
raymen 2008-01-14
  • 打赏
  • 举报
回复
SQL 2000
冷箫轻笛 2008-01-14
  • 打赏
  • 举报
回复
2000还是2005?

2005可以 try

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧