Это должно дать вам результаты, которые вы ищете, без каких-либо циклов ...
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
BEGIN DROP TABLE #TestData; END;
CREATE TABLE #TestData (
CharacterString VARCHAR(100) NOT NULL
);
INSERT #TestData(CharacterString) VALUES
('BRWN SPRTS 50 ML DRK RM AL N N SLR JRR'),
('BRWN SPRTS DRK RM AL N N SLR JRR 700ML'),
('700 ML DRK RM AL N N SNG-SM ALL OTHR'),
('SPRTS DRK RM AL 1.5 LTR N N TH-DPP-SHR'),
('N N TH-KRKN TH-KRKN-BLCK-SPCD-RM 3.5 LTR'),
('N N TH-KRKN 50 ML TH-KRKN-BLCK-SPCD-RM');
--==================================================================
SELECT
*,
Output = REPLACE(ISNULL(
SUBSTRING(td.CharacterString, ns.num_ml, se.ml_end - ns.num_ml),
SUBSTRING(td.CharacterString, ns.num_ltr, se.ltr_end - ns.num_ltr)
), ' ', '')
FROM
#TestData td
CROSS APPLY ( VALUES (
NULLIF(PATINDEX('%[0-9]%ML%', td.CharacterString), 0),
NULLIF(PATINDEX('%[0-9]%LTR%', td.CharacterString), 0)
) ) ns (num_ml, num_ltr)
CROSS APPLY ( VALUES (
CHARINDEX('ML', td.CharacterString, ns.num_ml) + 2,
CHARINDEX('LTR', td.CharacterString, ns.num_ltr) + 3
) ) se (ml_end, ltr_end);
Reults ...
Output
------------
50ML
700ML
700ML
1.5LTR
3.5LTR
50ML