次の形式のフィルターがいくつかあります。
オブジェクト A
+/- Start End
----------------------------------------------
+ 000000080000 000000090000
- 000000800500
+ 054*
オブジェクト B
+/- Start End
----------------------------------------------
+ 000000090000 000000100000
+ 00??00900500
- 000000900500
+ 055*
その意味は:
000000800500 を除く 000000080000 から 000000090000 までの番号と、054 で始まる番号は、オブジェクト A に関連付けられています。
000000900500 を除く 000000090000 から 000000100000 までの数字、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 を返します...