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,"C",11,256,"2001-06-10",6900,"TELEFONE A"

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