# Database Discussions > MS SQL Server 7/MS SQL Server 2000 >  Stored procedure locking tables

## mutley

Hi

   when I run Stored Procedure Below, It lock two tables, but I am using COMMIT and ROLLBACK, but It would be lock, Where It is wrong , thank you in advance .
PS. WHEN I call from query analyzer as:

xec usp_insere_cliente 2,2,&#34;C&#34;,11,256,&#34;2001-06-10&#34;,6900,&#34;TELEFONE A&#34;

SELECT @@TRANCOUNT

It return 1


cREATE procedure usp_insere_cliente
             @ID_EMPRESA int, 
	@ID_SERVICO int, 
             @ID_TIPO_TELEFONE char(1), 
	@CD_DDD int, 
	@CD_PREFIXO int, 
	@DT_OPERACAO datetime, 
	@CD_FONE int, 
	@NM_CLIENTE varchar(40)
	--@DT_CADASTRO datetime
as
/* ==================================================  ==============
    Programador : Marcelo Toledo Velasquez
    Data             : 11/06/2001
    Objetivo       :  Verificar se Existe  Serviço e Empresa que Veio Do Header
     Retorno       :   1  - Se não Existir Cadastro na Tabela MODALIDADE
                             2 -  Se  Telefone  Já consta  Na tabela OPERAÇÃO
                            0 -   Se Gravação Ocorreu com Sucesso
		-1  - Erro de Gravação
==================================================  ================ */ 
	set nocount on
	--set ansi_defaults on
	declare	@ID_OPERACAO int,
                           @ID_MODALIDADE int,
		@ERRO INT

		-- **************************************
		--      OBTER ID_MODALIDADE
		--**************************************
		 SELECT @ID_MODALIDADE =  ID_MODALIDADE 
					FROM MODALIDADE
						WHERE ID_EMPRESA = @ID_EMPRESA  AND
							ID_SERVICO = @ID_SERVICO AND
							ID_TIPO_TELEFONE = @ID_TIPO_TELEFONE AND
							CD_DDD = @CD_DDD AND
							CD_PREFIXO = @CD_PREFIXO
			IF @@ROWCOUNT  =  0 
				BEGIN
					SELECT @ID_MODALIDADE = ID_MODALIDADE 
					FROM MODALIDADE
					WHERE ID_EMPRESA = @ID_EMPRESA AND
							ID_SERVICO = @ID_SERVICO AND
							ID_TIPO_TELEFONE = @ID_TIPO_TELEFONE AND
							CD_DDD = @CD_DDD
					IF @@ROWCOUNT = 0 
						BEGIN
							SELECT @ID_MODALIDADE =  ID_MODALIDADE 
							FROM MODALIDADE
							WHERE ID_EMPRESA = @ID_EMPRESA AND
								ID_SERVICO = @ID_SERVICO AND
								ID_TIPO_TELEFONE = @ID_TIPO_TELEFONE
							IF @@ROWCOUNT = 0 
							    BEGIN	

								SELECT @ID_MODALIDADE =  ID_MODALIDADE 
								FROM MODALIDADE
								WHERE ID_EMPRESA = @ID_EMPRESA  AND
									ID_SERVICO = @ID_SERVICO 
								IF @@ROWCOUNT = 0 
									RETURN 1
									--SELECT @OUTPUT = 1
							     END
						END

				END
	--**************************************************  ****************
	--    VERIFICA SE OPERAÇÃO JÁ FOI CADASTRADA
	--**************************************************  ***************
	IF EXISTS (SELECT 1 
			FROM OPERACAO
				WHERE ID_SERVICO = @ID_SERVICO AND
					ID_EMPRESA = @ID_EMPRESA AND
					CD_DDD = @CD_DDD AND
					CD_PREFIXO = @CD_PREFIXO AND
					CD_FONE = @CD_FONE AND
					DT_OPERACAO = @DT_OPERACAO)
		return 2				
		--SELECT @OUTPUT = 2


          SELECT @ID_OPERACAO = MAX(ID_OPERACAO) + 1 FROM OPERACAO

             IF @ID_OPERACAO IS NULL
                 SELECT @ID_OPERACAO = 1

	BEGIN TRANSACTION INS_CLIENTE


       		INSERT INTO  OPERACAO(
			ID_OPERACAO, 
			ID_TIPO_TELEFONE, 
			ID_SERVICO, 
			ID_EMPRESA, 
			DT_OPERACAO, 
			CD_DDD, 
			CD_PREFIXO, 
			CD_FONE, 
			NM_CLIENTE,
			DT_CADASTRO)
		values (
			@ID_OPERACAO, 
			@ID_TIPO_TELEFONE, 
			@ID_SERVICO, 
			@ID_EMPRESA, 
			@DT_OPERACAO, 
			@CD_DDD, 
			@CD_PREFIXO, 
			@CD_FONE, 
			@NM_CLIENTE, 
			GETDATE()) 
	IF  @@error = 0 
		BEGIN
				INSERT INTO  CHAMADA(
					ID_OPERACAO, 
					ID_MODALIDADE)
					VALUES (@ID_OPERACAO, 
						@ID_MODALIDADE)                         
                                 		 IF @@ERROR = 0 
					BEGIN
					    COMMIT  TRAN INS_CLIENTE
					    RETURN 0
					    --SELECT  @OUTPUT = 0	
					END

		      		 ELSE
					BEGIN
					     ROLLBACK  TRAN  INS_CLIENTE
 				 	     RETURN -1
					    --SELECT @OUTPUT = -1
					END
		 END
	ELSE
		BEGIN
			ROLLBACK TRAN  INS_CLIENTE
			RETURN -1
			--  SELECT @OUTPUT = -1	
		END

----------

