0

次の形式のフィルターがいくつかあります。

オブジェクト 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 を返します...

4

1 に答える 1

0

SQL 2005 で CLR 関数を使用できますか?

LIKE JOINS (ここで、? は [0-9] になり、* は % になります) を使用して生の SQL で可能であり、その後に CAST が続く可能性がありますが、これが CLR 関数の目的です...

于 2009-07-17T19:02:30.013 に答える