如何使用SQL Server处理多个通配符

时间:2009-07-17 15:30:12

标签: sql-server clr wildcard

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

对象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)中没有数字可以与多个对象相关联,而且我真的不知道如何做这样的事情(除了暴力之外)。

我有一个支持通配符的CLR函数Utils.fIsInFilter('?8 *','181235467895'),如果有帮助,将返回1 ...

1 个答案:

答案 0 :(得分:0)

你能在SQL 2005中使用CLR功能吗?

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