Here is some brutal solution, but it will be able to separate mixed strings also:
DECLARE @t TABLE(ID INT, S NVARCHAR(MAX))
INSERT INTO @t VALUES (1, '123AB'), (2, '45CDEF'), (3, '1AS^&*876YU')
DECLARE @m INT
SELECT @m = MAX(LEN(S)) FROM @t
;WITH cte AS
(SELECT ID, SUBSTRING(S, 1, 1) AS S, 1 AS N, ISNUMERIC(SUBSTRING(S, 1, 1)) AS NU FROM @t
UNION ALL
SELECT t.ID, SUBSTRING(t.S, N + 1, 1) AS S, N + 1 AS N, ISNUMERIC(SUBSTRING(t.S, N + 1, 1)) AS NU FROM cte
JOIN @t t ON t.ID = cte.ID
WHERE N < @m
)
SELECT
(SELECT S FROM cte c2 WHERE c2.ID = c1.ID AND NU = 1 FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)') AS NumericPart,
(SELECT S FROM cte c2 WHERE c2.ID = c1.ID AND NU = 0 FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)') AS TextPart
FROM cte c1
WHERE S <> ''
GROUP BY ID
Output:
NumericPart TextPart
123 AB
45 CDEF
1876 AS^&*YU