2009-07-17 8 views
0

j'ai des filtres sous la forme suivante:Comment gérer plusieurs jokers avec SQL Server

Objet A

+/- Start   End 
---------------------------------------------- 
+  000000080000 000000090000 
-  000000800500 
+  054* 

objet B

+/- Start   End 
---------------------------------------------- 
+  000000090000 000000100000 
+  00??00900500 
-  000000900500 
+  055* 

Cela signifie:

Nombres entre 000000080000 et 000000090000 sauf 000000800500 et les numéros commençant par 054 sont associés à l'objet A.

Les chiffres entre 000000090000 et 000000100000 000000900500, à l'exception des numéros correspondant à 00 ?? 00900500 (sauf 000000900500 bien sûr), et les numéros commençant par 055 sont associés à l'objet B.

l'exemple de la structure de la table:

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 
) 

J'ai besoin d'un moyen de m'assurer qu'aucun nombre ne peut être associé à plus d'un objet, en SQL (ou CLR), et je n'ai aucune idée de comment faire une telle chose (en plus de bruteforce).

J'ai une fonction CLR Utils.fIsInFilter ('? 8 *', '181235467895') qui prend en charge les caractères génériques et renverrait 1, si elle aide ...

Répondre

0

Peut-on utiliser une fonction CLR dans SQL 2005?

Il est possible dans SQL brut utilisant LIKE REJOINT (où? Devient [0-9] et * devient%), peut-être suivie par CAST, mais c'est ce que les fonctions CLR sont pour ...

+0

Ouais, je peux utiliser une fonction CLR ou le LIKE, je ne sais toujours pas comment le faire. Par exemple, comment savez-vous si la plage 12345678912-1900000000 chevauche éventuellement le caractère générique "1 * 98 * 9 ??" ? (numéro 122982123959 par exemple chevauche) – Kevin

+0

Maintenant, vous donné cet exemple plus complexe, je suppose que LIKE/CAST fonctionnerait pour single? anywhwere avec 123% ou% 123 types seulement. Je dis "possible" parce que les choses sont rarement "impossibles" mais je ne voudrais pas essayer ... – gbn

Questions connexes