Eu não sei em detalhes como está a formatação desta sua coluna de endereço, mas você pode tentar desmebrar os valores usando a função CHARINDEX.
Tentei simular como estariam suas tabelas, e aí gerei as seguintes consultas:
CREATE TABLE #TabelaEndereco
(endereco_completo VARCHAR(100)
);
GO
INSERT INTO #TabelaEndereco VALUES ('Avenida ABCD, 125');
GO
CREATE TABLE #TipoLogradouro
(tipo VARCHAR(50),
rua VARCHAR(50));
GO
CREATE TABLE #Logradouro
(numero VARCHAR(50),
id_bairro INT
);
GO
WITH CTE_Endereco (endereco_completo, tipo_logradouro, numero)
As (
SELECT
endereco_completo,
CHARINDEX(' ',endereco_completo),
CASE WHEN CHARINDEX(' ',endereco_completo) = 0 THEN 0 ELSE
LEN(endereco_completo) - CHARINDEX(' ',REVERSE(endereco_completo)) + 1 END
FROM #TabelaEndereco)
INSERT INTO #TipoLogradouro (tipo,rua)
SELECT
LEFT(endereco_completo,tipo_logradouro) As Tipo_Logradouro,
CASE
WHEN tipo_logradouro = numero THEN ''
ELSE SUBSTRING(endereco_completo,tipo_logradouro + 1,numero - tipo_logradouro - 1) END As Rua
FROM CTE_Endereco;
GO
WITH CTE_Endereco (endereco_completo, tipo_logradouro, numero)
As (
SELECT
endereco_completo,
CHARINDEX(' ',endereco_completo),
CASE WHEN CHARINDEX(' ',endereco_completo) = 0 THEN 0 ELSE
LEN(endereco_completo) - CHARINDEX(' ',REVERSE(endereco_completo)) + 1 END
FROM #TabelaEndereco)
INSERT INTO #Logradouro(numero)
SELECT
CASE
WHEN numero = 0 THEN ''
ELSE RIGHT(endereco_completo, LEN(endereco_completo) - numero) END As Numero
FROM CTE_Endereco
SELECT*FROM #TipoLogradouro;
SELECT*FROM #Logradouro;
Depois disso, para manter a referência do id_bairro, você pode fazer um INSERT SELECT semelhante (aí não sei como está a sua modelagem para fazer a consulta).