none
executar um insert através de dados de uma tabela RRS feed

  • Pergunta

  • caros estou tentado fazer o seguinte, eu tenho uma tabela com uma unica coluna com mais de 500.000 linhas, onde no conteúdo de cada linha tenho um comando de inset para uma outra tabela.

    mas não sei se é possível fazer fazer um 'select' da primeira tabela, e com o resultado fazer o 'insert into'.


    quinta-feira, 20 de março de 2014 20:46

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 20 de março de 2014 21:38
  • Deleted
    quinta-feira, 20 de março de 2014 21:55
  • Eis uma possibilidade, utilizando cursor:

    -- código 1 v3 set NoCount On; declare ComandoSQL CURSOR Forward_Only Read_Only for SELECT ColunaInsert from TabelaComando; declare @ComandoSQL nvarchar(max), @MarcaTr varchar(30);

    set @MarcaTr= 'BigINSERT-' + CONVERT(varchar, GetDate(), 103) + '-' + CONVERT(varchar, GetDate(), 108); PRINT 'Anote para caso seja necessário restaurar log: ' + @MarcaTr
    OPEN ComandoSQL;

    BEGIN TRANSACTION BigT with mark @MarcaTr;
    FETCH NEXT from ComandoSQL into @ComandoSQL; while @@FETCH_STATUS = 0 begin EXECUTE(@ComandoSQL); FETCH NEXT from ComandoSQL into @ComandoSQL; end; COMMIT TRANSACTION BigT;

    CLOSE ComandoSQL; DEALLOCATE ComandoSQL;   

    Esse é o código básico; falta acrescentar tratamento de erro e qual o escopo do estado de transação.
    No código acima substitua TabelaComando pelo nome da tabela e ColunaInsert pelo nome da coluna.

     
    Para testar:

    use tempdb;
    CREATE TABLE TabelaComando (ColunaInsert nvarchar(200)); CREATE TABLE Cobaia (Cod int, Nome varchar(20)); INSERT into TabelaComando values (N'INSERT INTO Cobaia values (18, ''Verde'')'), (N'INSERT INTO Cobaia values (22, ''Laranja'')'), (N'INSERT INTO Cobaia values (35, ''Violeta''), (36, ''Amarelo'')'), (N'INSERT INTO Cobaia values (48, ''Vermelho'')'),
      (N'INSERT INTO C0baia values (98, ''Azul'')'),
    (N'INSERT INTO Cobaia values (99)'); SELECT * from TabelaComando; go
    -- executar o código 1 ...
    SELECT * from Cobaia;


        José Diz     Belo Horizonte, MG - Brasil
    (Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)


    José,

    Você não acha que seria mais indicado utilizar um bloco de laço através do While do que utilizar Cursor?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 22 de março de 2014 23:32
    Moderador
  • Deleted
    domingo, 23 de março de 2014 11:31
  • Deleted
    domingo, 23 de março de 2014 17:20