none
Trigger lock table. RRS feed

  • Pergunta

  • Boa noite,

    Criei uma Trigger em uma tabela para sempre que houver um UPDATE em um campo de data a TRIGGER vai disparar e gerar um aquivo em TXT. A trigger está disparando conforme esperado, ela cria o arquivo porem ela "LOCKA" o banco. O arquivo é gerado sem informações (0 KB) e trava se tendo deleta-lo também (O arquivo está sendo usado por outro programa....).

    create trigger TG_Ticket
    on Tickets
    for update as
    
    declare @command  varchar(1000)
    declare @DirectoryOutFile varchar (100)
    declare @OutFileName varchar (100)
    declare @query VARCHAR(1000)
    DECLARE @ID VARCHAR(10)
    DECLARE @OutFilePath varchar(100)
    
    if (exists(select LastUpdateTime from inserted))
    begin
    	set @ID = (select id from inserted)
    	set @DirectoryOutFile = '"f:\\'
    	set @OutFileName = REPLICATE('0', 9 - LEN(convert(varchar(9), @id)))+CONVERT(varchar(9), @id)
    	SET @query = '"SELECT COLDADOS FROM JuxtaPOS3.dbo.VW_ConsultaInformacoesArquivo WHERE TICKETID = ' + @ID + ' ORDER BY ORDEM"'
    	set @OutFilePath = @DirectoryOutFile + @OutFileName + '.txt"'
    
    	set @command  = 'BCP ' + @query + ' queryout ' + @OutFilePath + ' -T -S .\sqlexpress -c -t\0'
    	exec xp_cmdshell  @command
    end

    Desde já agradeço.


    • Editado galves.rod sábado, 20 de dezembro de 2014 20:31
    sábado, 20 de dezembro de 2014 20:29

Respostas

Todas as Respostas

  • Usando o (nolock) na consulta SQL o problema não ocorre.

    Obrigado.

    • Marcado como Resposta galves.rod sábado, 20 de dezembro de 2014 22:02
    sábado, 20 de dezembro de 2014 22:02
  • Galves.rod,

    Ok, mas eu acredito que o problema esteja na execução do XP_CMDShell, onde o BCP esta sendo chamado para fazer o input dos dados, mas o mesmo não esta sendo encerrado.

    Minha sugestão, utilize o parâmetro -Q na linha do comando BCP e veja se a sua consulta não gera mais bloqueio.

    O uso do NoLock realmente é uma prática para garantir e evitar que não ocorram bloqueios, mas por outro lado você poderá sofrer com possíveis situações de sujeira ou dados fantasmas.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    terça-feira, 23 de dezembro de 2014 12:39