none
Criar um INSERT a partir de um UPDATE RRS feed

  • Pergunta

  • Boa tarde,

     

    Gostaria de uma ajuda para criar um INSERT a partir de uma procedure criada para fazer update!

     

    Esse é o código:

    USE [admlivros]

    GO

    /****** Object:  StoredProcedure [dbo].[CaractItem]    Script Date: 08/17/2011 17:07:18 ******/

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

     

    ALTER PROC [dbo].[CaractItem]

    (

    @CaractList varchar(500) = 118406 --lista dos itens. passada como parametro para a procedure. lista dos COD_ITEM, separadas por vírgula

    )

    AS

    BEGIN

     

    DECLARE @CaractID varchar(10), @Cont int, @CodCaract int, @CodTpCaract int

     

      SET @CodTpCaract = 1

    SET @CaractList = LTRIM(RTRIM(@CaractList))+ ','

    SET @Cont = CHARINDEX(',', @CaractList, 1) --Retorna posição da primeira vírgula 

     

    IF REPLACE(@CaractList, ',', '') <> ''

    BEGIN

    WHILE @Cont > 0

    BEGIN

    SET @CaractID = LTRIM(RTRIM(LEFT(@CaractList, @Cont - 1))) --atribui valor do primeiro campo da lista à variavel

    IF @CaractID <> ''

    BEGIN

            while @CodTpCaract <= 10 --loop para o update

            begin

     

      SET @CodCaract = CASE WHEN @CodTpCaract = 1 THEN 1

                                    WHEN @CodTpCaract = 2 THEN 30

                                    WHEN @CodTpCaract = 3 THEN 2025

                                    WHEN @CodTpCaract = 4 THEN 93

                                    WHEN @CodTpCaract = 5 THEN 95

                                    WHEN @CodTpCaract = 6 THEN 2024

                                    WHEN @CodTpCaract = 7 THEN 303

                                    WHEN @CodTpCaract = 8 THEN 304

                                    WHEN @CodTpCaract = 9 THEN 86

                                    WHEN @CodTpCaract = 10 THEN 305

                                end

     

              Update dbo.ITEM_CARACTERISTICA                      

              Set dbo.ITEM_CARACTERISTICA.COD_CARACT = @CodCaract                

              From dbo.ITEM_CARACTERISTICA AS IC

              Where IC.COD_ITEM = @CaractID

              And IC.COD_TPO_CARACT = @CodTpCaract

     

              SET @CodTpCaract = @CodTpCaract + 1

            end

     

    END

     

          --incrementa posição para próxima vírgula

    SET @CaractList = RIGHT(@CaractList, LEN(@CaractList) - @Cont)

    SET @Cont = CHARINDEX(',', @CaractList, 1)

     

    END

    END

     

    END

     

    quarta-feira, 17 de agosto de 2011 20:14

Respostas

  • Tsaldanha,

     

    Se possivel poste o que o Gustavo pediu para poder nos ajudar.

    Todo caso, de forma bem generica, isso é teoricamente uma procedure, então vejo 2 opções:

    Sua procedure ira trabalhar de forma transacional, então teoricamente se voce ja tem os dados na mão, creio que uma solução seja logo depois do update ja realizar o select.

    Ou então, sendo menos performatico, criar uma trigger for update na sua tabela destino, e essa ira realizar um select na sua outra tabela.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 18 de agosto de 2011 13:00
    Moderador

Todas as Respostas

  • Boa Noite,

    Informe o SQL Server utilizado e exemplifique por favor.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 17 de agosto de 2011 21:58
  • Tsaldanha,

     

    Se possivel poste o que o Gustavo pediu para poder nos ajudar.

    Todo caso, de forma bem generica, isso é teoricamente uma procedure, então vejo 2 opções:

    Sua procedure ira trabalhar de forma transacional, então teoricamente se voce ja tem os dados na mão, creio que uma solução seja logo depois do update ja realizar o select.

    Ou então, sendo menos performatico, criar uma trigger for update na sua tabela destino, e essa ira realizar um select na sua outra tabela.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 18 de agosto de 2011 13:00
    Moderador