none
criar uma rotina usando procedure. RRS feed

  • Pergunta

  • Caso alguém possa me ajudar.

    Quero criar uma rotina pra selecionar um campo de uma tabela "RUA JOSE CAETANO REZENDE , 340 / CASA" parecido este e desmembrar este endereço, ao mesmo tempo colocar estes endereço em : SE  for ("rua","avenida", "casa ","apartmento" etc) pegar o nome da rua, avenida, etc e salvar na tabela tip_logradouro(que tem todos os campos possiveis), já o numero na tabela logradouro(QUE TEM OS SEGUINTES campos- id_lograd,numero,id_bairro, sendo id_lograd identity). porem com uma compricação, estes endereços tem que conter o id_bairro, fazer um check up com o id_cidade.cidade=id_cidade.bairro e id_bairro.bairro=id_bairro.logradouro.

    segunda-feira, 28 de maio de 2012 18:06

Todas as Respostas

  • 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).
    • Sugerido como Resposta Rafael Boschini quarta-feira, 22 de agosto de 2012 13:14
    segunda-feira, 16 de julho de 2012 17:46