我有以下形式的一些过滤器:
对象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 ...
答案 0 :(得分:0)
你能在SQL 2005中使用CLR功能吗?
在原始SQL中可以使用LIKE JOINS(其中?变为[0-9]而*变为%),也许后面是CAST,但这就是CLR函数的用途......