0

我有以下形式的一些过滤器:

对象 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,如果它有帮助...

4

1 回答 1

0

您可以在 SQL 2005 中使用 CLR 函数吗?

在原始 SQL 中可以使用 LIKE JOINS(其中 ? 变为 [0-9] 并且 * 变为 %),可能后跟 CAST,但这就是 CLR 函数的用途......

于 2009-07-17T19:02:30.013 回答