SQL рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде SEDOL рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рд╕рдВрджрд░реНрдн
рдпрд╣ рдХреЛрдб рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╢реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдпрд╛рдд рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдг рдереЗ рдЬреЛ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдереЗред
рдпрд╣ рдПрдХ SEDOL рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓рд┐рдВрдХ рдкрд░ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SQL рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рддреАрди рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд▓реЗрдЦреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ ISIN, SEDOL рдФрд░ CUSIP рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ред
SQL
ALTER FUNCTION CheckSEDOL(@SEDOL NVARCHAR(20))RETURNS INT AS BEGINDECLARE @Check INTIF RIGHT(@SEDOL,1) NOT BETWEEN '0' AND '9' BEGINSET @Check=-1RETURN @CheckENDIF PATINDEX('%[^0-Z]%',@SEDOL)>0 BEGINSET @Check=-3RETURN @CheckEND
DECLARE @Sum INT=0,@Letter INT=1,@Char VARCHAR(1)WHILE @Letter BEGINSET @Char=SUBSTRING(@SEDOL,@Letter,1)SET @Sum=@Sum+((SELECT (CASE WHEN @Char BETWEEN '0' AND '9' THEN @Char ELSE ASCII(UPPER(@Char))-55 END))*(CASE @Letter WHEN 1 THEN 1 WHEN 2 THEN 3 WHEN 3 THEN 1 WHEN 4 THEN 7 WHEN 5 THEN 3 WHEN 6 THEN 9 WHEN 7 THEN 1 ELSE 0 END))SET @Letter=@Letter+1ENDSET @Sum=(10 - @Sum%10)% 10
IF LEN(@SEDOL)<>7 BEGINSET @Check=-4RETURN @CheckEND
IF RIGHT(@SEDOL,1) BETWEEN '0' AND '9' BEGINSET @Check =(CASE WHEN RIGHT(@SEDOL,1)=@Sum THEN 1 ELSE 0 END)ENDRETURN @CheckEND