|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Wednesday, November 30, 2011 9:29 AM
Points: 14,
Visits: 21
|
|
|
|
|
|
SSC-Dedicated
           
Group: General Forum Members
Last Login: Today @ 6:14 PM
Points: 32,892,
Visits: 26,763
|
|
You made the mistake of using ISNUMERIC to check for digits. ISNUMERIC does not equal ISALLDIGITS... try this and see what I mean...
SELECT dbo.check_digit('072---326')
Rather than just have it return a check digit, why not have it validate the ABA routing number altogether? For example...
DECLARE @RoutingNumber VARCHAR(8000) --Allows check of wrong size numbers SET @RoutingNumber = '067803457'
SELECT CASE WHEN LEN(@RoutingNumber)=9 AND @RoutingNumber NOT LIKE '%[^0-9]%' --Check to make sure is all digits AND RIGHT(@RoutingNumber ,1) = (--==== Calculates check digit (Digit 9) SELECT 10-SUM(mv.DigitVal)%10 --Sum of individual digit values subtracted for new number ending in 0 FROM (--==== Gets multiplied value for each digit in 3, 7, 1 pattern SELECT CASE WHEN (t.N-1)%3 = 0 THEN SUBSTRING(@RoutingNumber,t.N,1)*3 --Digits 1,4,7 WHEN (t.N-1)%3 = 1 THEN SUBSTRING(@RoutingNumber,t.N,1)*7 --Digits 2,5,8 WHEN (t.N-1)%3 = 2 THEN SUBSTRING(@RoutingNumber,t.N,1)*1 --Digits 3,6 END AS DigitVal FROM dbo.Tally t --See http://www.sqlservercentral.com/scripts/Advanced+SQL/62486/ WHERE t.N <= 8 ) mv ) THEN 'Valid' ELSE 'Not Valid' END go
--Jeff Moden "RBAR is pronounced "ree-bar" and is a "Modenism" for "Row-By-Agonizing-Row".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
For better, quicker answers on T-SQL questions, click on the following... http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following... http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
|
|
|
|