读书人

请问关于规则匹配的有关问题,多谢了

发布时间: 2012-02-01 16:58:19 作者: rapoo

请教关于规则匹配的问题,谢谢了
我现在想做一个规则库,举例如下:
现有两个规则(存在数据库中):
1.(custno= 'A001 ') and (productype like '% ') and (processno= 'A1 ')
2.(custno= 'B001 ') and (productype = 'BOX ') and (type= 'G ') and (itemtype= 'PM ')
现在我有一个条件: processno= 'A1 ' and custno= 'A001 ' and productype= 'BOOK '
按理我应该匹配到第一条规则. 可是我要怎么样才能匹配得出来?用正则表达式吗? 还是自己写分析器?
更复杂的情况是:逻辑符不仅有and ,或许还会有or , NOT等,比较符除了=号外,或许还有> =, <=,between,in 等(当然,前提是能解决上面的问题).
谢谢大家.
---- 顺便抱怨一下,这个发贴页面做得不好,刚才不小心想给200分,结果系统说我不能给这么多分,结果再退回去时,刚才打的字全丢了,又得重新打一次,郁闷 ---

[解决办法]
貌似很困难的说

[解决办法]
--用触发器约束
create trigger tr_tablename_i on tablename
for insert,update
as
begin
if not exists(
select 1 from inserted
where (custno= 'A001 ') and (productype like '% ') and (processno= 'A1 ')
or (custno= 'B001 ') and (productype = 'BOX ') and (type= 'G ') and (itemtype= 'PM '))
begin
select @message= '规则不匹配! '
raiserror(@message,16,1)
rollback tran
return
end
end
[解决办法]
感觉这东西挺麻烦,不是一句话2句话能说明白的
[解决办法]
可不可以这样
create table 规则表(规则 varchar(8000))
两条记录
(custno= 'A001 ') and (productype like '% ') and (processno= 'A1 ')
(custno= 'B001 ') and (productype = 'BOX ') and (type= 'G ') and (itemtype= 'PM ')

现在有一条记录主键是A001,循环规则表,用动态语句进行匹配,拼成的语句就是这样的:
select 1 from t where 主键= 'A001 ' and (custno= 'A001 ') and (productype like '% ')
and (processno= 'A1 ')



[解决办法]
up
[解决办法]
你就把用户条件组成SQL,查询就行了吧
[解决办法]
好像,提出想,的件分散
比如
1.(custno= 'A001 ') and (productype like '% ') and (processno= 'A1 ')
2.(custno= 'B001 ') and (productype = 'BOX ') and (type= 'G ') and (itemtype= 'PM ')
拆成2表
t1
id p_id description
-----------------------------------
1 1 custno= 'A001 '
2 1 productype like '% '
3 1 processno= 'A1 '
4 2 custno= 'B001 '
5 2 productype= 'BOX '
6 2 type= 'G '
7 2 itemtype= 'PM '

t2
p_id id_d
-----------------------------------
1 1 and 2 and 3
2 4 and 5 and 6 and 7


/*********/
有一件processno= 'A1 ' and custno= 'A001 ' and productype= 'BOOK '
按and split,可以得出
processno= 'A1 '
custno= 'A001 '
productype= 'BOOK '
去匹配t1,可以得出 : 3 ,1 ,2 (2匹配productype需要理),
order by 後可以得出件 1 and 2 and 3,再去匹配t2,可以得出是第一...

------------------------------------------------------


了多,估也不怎可行:( 偶路
[解决办法]
然,如果你存在
(id=1 or id=2) and type= 'A '
而件是id=1 and type= 'A ' 也是匹配的,就比了:(
可能要再用似bom表的,行分解,分成
id=1 and type= 'A '
id=2 and type= 'A '
(id=1 or id=2) and type= 'A '

------------------------------------------
了...

读书人网 >SQL Server

热点推荐