Ideen er at når min record skal valideres mod disse profiler (Skal altid starte fra toppen, da profilerne er prioriterede).
Når den så rammer en profil der matcher skal denne vælges. Formatet i filtrene er som beskrevet ovenstående: en "|" betyder "eller" og ".." betyder "Between".
Jeg er i tvivl om hvordan jeg skal gribe det an. Jeg regner med at bygge den i en Stored Procedure.
And the Recordset to be validated agianst these profiles could be like: NO group1 group2 group3 group4 ----------------------------------------- 123 600 13000 25 5600
Enten skal du bruge en sp eller også må du lave et bedre tabeldesign! At lave en select der tager højde for tallene i intervallet 5..10 er vist ikke noget der lige lader sig gøre!
Datatyperne i profiltabellen er varchars for at den kan indeholde "|" og ".." En record kan sagtens matche flere profiler, men de vil blive gennemløbet fra toppen, dvs. at de mest 'restiktive' filtre ligger øverst (dem med flest krav)
Jeg har dog selv løst problemet. (Se nedenstående)
Men hvis du eller andre har en bedre løsning kunne det være interessant at se.
Set @FilterA=600 //Varens Group1 filter. (Ville matche A profilen)
IF (@OR_Position>0) BEGIN WHILE (@OR_Position>0) BEGIN SET @GenProdPostingGroupFilterLength = LEN(@GenProdPostingGroupFilter) SET @GenProdPostingGroupFilter2 = Substring(@GenProdPostingGroupFilter, 1, @OR_Position-1) SET @GenProdPostingGroupFilter = Substring(@GenProdPostingGroupFilter, @OR_Position+1, @GenProdPostingGroupFilterLength) SET @GenProdPostingGroupFilterLength = LEN(@GenProdPostingGroupFilter) SET @OR_Position = CHARINDEX('|', @GenProdPostingGroupFilter) IF (CAST(@FilterA as VarChar(50)) = @GenProdPostingGroupFilter2) BEGIN SET @ProfileFilterA = True END END IF (CAST(@FilterA as VarChar(50)) = @GenProdPostingGroupFilter2) BEGIN SET @ProfileFilterA = True END END
IF (@BETWEEN_Position>0) BEGIN
IF (RTRIM(CAST(@FilterA AS Char(30))) >= REPLACE(@GenProdPostingGroupFilter, '..', ' AND '+RTRIM(CAST(@FilterA AS Char(30)))+' <= ')) BEGIN SET @ProfileFilterA = True END END
Ovenstående kode skal løbes igennem 4 gange (1 gang for hver filter) på hver profil.
Rent performance mæssigt gør det ikke noget. Ovenstående kode (som dog kun er et udklip af den samlede procedure der er 300 linier lang) bliver eksekveret på under 1 sek. selv om der ligger en del profiler.
/SBI
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.