我有以下形式的一些过滤器:
对象 A
+/- Start End
----------------------------------------------
+ 000000080000 000000090000
- 000000800500
+ 054*
对象 B
+/- Start End
----------------------------------------------
+ 000000090000 000000100000
+ 00??00900500
- 000000900500
+ 055*
它的意思是:
000000080000 和 000000090000 之间的数字(000000800500 除外)和以 054 开头的数字与对象 A 相关联。
000000090000 和 000000100000 之间的数字,除了 000000900500,匹配 00??00900500 的数字(当然除了 000000900500),以及以 055 开头的数字都与对象 B 相关联。
表结构示例:
CREATE TABLE dbo.Filter
(
IDFilter int IDENTITY PRIMARY KEY
)
CREATE TABLE dbo.FilterRow
(
IDFilterRow int IDENTITY PRIMARY KEY
,IDFilter int FOREIGN KEY REFERENCES dbo.Filter(IDFilter) NOT NULL
,Operator bit --0 = -, 1 = + NOT NULL
,StartNumber varchar(50) NOT NULL
,EndNumber varchar(50)
)
CREATE TABLE dbo.[Object]
(
IDObject int IDENTITY PRIMARY KEY
,Name varchar(10) NOT NULL
,IDFilter int FOREIGN KEY REFERENCES dbo.Filter(IDFilter) NOT NULL
)
我需要一种方法来确保在 SQL(或 CLR)中没有数字可以与超过 1 个对象相关联,而且我真的不知道如何做这样的事情(除了蛮力)。
我确实有一个 CLR 函数 Utils.fIsInFilter('?8*', '181235467895') 支持通配符并返回 1,如果它有帮助...