导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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

2005可以 try
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告