日期:2014-05-18  浏览次数:20448 次

如何判断动态表达式是否成立
有一表达式字段,值为‘(@ContractSum   > =   100000)   OR   (@Is_importance   =   true)   OR   (@Is_JoinForce   =   1)’,现需根据页面输入的数据判断此表达式是否成立,判断前已将页面相应数据值写入表,用以下语句取出数据值后替代@ContractSum等变量:
                       
                        declare   @resu   bit
                        declare   @varname   varchar(50)
                        declare   @varvalue   varchar(1000)
                       
                        declare   @v   cursor
                        set   @v   =   cursor   for   select   VarName,VarValue   from   WF_RT_ProcessData   where   ProcessRTID   =   @rt_process_id
                        open   @v
                        fetch   next   from   @v   into   @varname,@varvalue
                        while(@@fetch_status   =   0)
                        begin
                                --寻找变量,将变量值代入表达式
                                if   CHARINDEX( '@ '+rtrim(@varname),@expression)   >   0   --找到变量名,替换变量值
                                        select   @expression   =   REPLACE(@expression, '@ '+rtrim(@varname), ' ' ' '+rtrim(@varvalue)+ ' ' ' ');
                                fetch   next   from   @v   into   @varname,@varvalue  
                        end                    

现在的问题是不知道如何判断@expression的真假,试过以下办法,但不成功
set   @sql   =   'if( '+   @expression   +   ')   set   @resu   =   1   else   set   @resu   =   0 '
exec(@sql)

------解决方案--------------------
declare @expression varchar(100),@resu bit,@sql nvarchar(200)
set @expression= '(1000 > = 100000) OR (1 = 1) '
set @sql = 'if( '+ @expression + ') set @resu = 1 else set @resu = 0 '
--print @sql
exec sp_executesql @sql,N '@resu bit output ',@resu output
print @resu

------解决方案--------------------
从动态SQL中获取值应该按如下处理:


--如何将exec执行结果放入变量中?

declare @num int, @sql nvarchar(4000)
set @sql= 'select @a=count(*) from tableName '
exec sp_executesql @sql,N '@a int output ',@num o