Как обрабатывать несколько подстановочных знаков с SQL Server - PullRequest
0 голосов
/ 17 июля 2009

У меня есть несколько фильтров в следующем виде:

Объект 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, если это поможет ...

1 Ответ

0 голосов
/ 17 июля 2009

Можете ли вы использовать функцию CLR в SQL 2005?

Это возможно в необработанном SQL с использованием LIKE JOINS (где? Становится [0-9] и * становится%), возможно, с последующим CAST, но для этого предназначены функции CLR ...

...