I'm not sure what you're trying to achieve, but:
1) your code is incomplete,
2) you not provided error message or details of issue
3) it sounds like you want to count the parts in each string.
Ad. 1) and 2)
Have a look at your code and read my comments:
Declare @seglth int;
set @seglth =COUNT(@segment);
IF(0<=@seglth)
BEGIN
SET @segment='';
SET @segment+='';
END
Do you see your mistakes?
Ad 3)
If you would like to count parts, try this:
DECLARE @src TABLE (SomeText VARCHAR(155))
INSERT INTO @src (SomeText)
VALUES('BLR/BOM/BOM/STV/STV/BOM/BOM/BLR'),
('523/523/524/524'),
('SG/SG/SG/SG'),
('X9M8VG/X9M8VG/X9M8VG/X9M8VG')
DECLARE @tmp TABLE(RowNo INT, StepNo INT, OrygText VARCHAR(155), MyPart VARCHAR(10))
;WITH MyText AS
(
SELECT SomeText As OrygText, LEFT(SomeText, CHARINDEX('/', SomeText)-1) AS MyPart, RIGHT(SomeText, LEN(SomeText) - CHARINDEX('/', SomeText)) AS Remainder,
ROW_NUMBER() OVER(ORDER BY SomeText) AS RowNo, 1 AS StepNo
FROM @src
WHERE CHARINDEX('/', SomeText)>0
UNION ALL
SELECT OrygText, LEFT(Remainder, CHARINDEX('/', Remainder)-1) AS MyPart, RIGHT(Remainder, LEN(Remainder) - CHARINDEX('/', Remainder)) AS Remainder, RowNo, StepNo + 1 AS StepNo
FROM MyText
WHERE CHARINDEX('/', Remainder)>0
UNION ALL
SELECT OrygText, Remainder AS MyPart, NULL AS Remainder, RowNo, StepNo + 1 AS StepNo
FROM MyText
WHERE CHARINDEX('/', Remainder)=0
)
INSERT INTO @tmp (RowNo, StepNo, OrygText, MyPart)
SELECT RowNo, StepNo, OrygText, MyPart
FROM MyText
ORDER BY RowNo, StepNo
SELECT RowNo, OrygText, MyPart, COUNT(MyPart) AS Parts
FROM @tmp
GROUP BY RowNo, OrygText, MyPart
Result:
RNo OrygText MyPart Parts
1 523/523/524/524 523 2
1 523/523/524/524 524 2
2 BLR/BOM/BOM/STV/STV/BOM/BOM/BLR BLR 2
2 BLR/BOM/BOM/STV/STV/BOM/BOM/BLR BOM 4
2 BLR/BOM/BOM/STV/STV/BOM/BOM/BLR STV 2
3 SG/SG/SG/SG SG 4
4 X9M8VG/X9M8VG/X9M8VG/X9M8VG X9M8VG 4