У меня есть несколько фильтров в следующем виде:
Объект A
+/- Start End
----------------------------------------------
+ 000000080000 000000090000
- 000000800500
+ 054*
Объект B
+/- Start End
----------------------------------------------
+ 000000090000 000000100000
+ 00??00900500
- 000000900500
+ 055*
Это значит:
Числа между 000000080000 и 000000090000, кроме 000000800500, и числа, начинающиеся с 054, связаны с объектом А.
Числа между 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), и я действительно понятия не имею, как это сделать (кроме bruteforce).
У меня есть функция CLR Utils.fIsInFilter ('? 8 *', '181235467895'), которая поддерживает символы подстановки и возвращает 1, если это поможет ...