Procedure

Boa noite,
Estou fazendo uma procedure para novo cliente, na qual segue abaixo,
gostaria de saber qual a diferença entre usar:
select ‘Cliente já cadastrado’ ou print ‘Cliente já cadastrado’, está mensagem deve ser visualizada na tela de cadastro de cliente

Create procedure adicionar_cliente(
@nome varchar(50),
@telefone varchar(14),
@cpf varchar(14)
)
as
begin
	begin try 
	insert into Cliente values (@nome, @telefone, @cpf)
	end try 
    begin catch
    select 'Cliente já cadastrado'
	end catch
end

A primeira coisa que recomendaria é não resumir qualquer erro possível a “Cliente não cadastrado”.
Sempre há a chance de ser algo totalmente diferente ( CPF com mais dígitos que o campo, por exemplo).

A diferença entre print e select é que o print é utilizando pra debug.
Apenas em ferramentas específicas do sql server (Query Analyser) ou seu programa ler metadados do resultset terá acesso a eles.

Com select você retornará um resultset contendo uma coluna, uma linha, contendo o valor “Cliente não cadastrado”
Usaria o método executeQuery para ler esse valor.

Na prática, nenhum dos dois é um tratamento de erro decente.

Seria mais interessante você deixar a procedure gerar um erro e ser tratada na aplicação.

Com isso você garante que qualquer chamada a procedure terá que lidar com esse problema.

Se utilizar a abordagem do select (muito utilizada por sinal), dará brecha ao chamador simplesmente ignorar os erros.

Certo, é que neste caso a tabela de cliente é a seguinte

Create table Cliente(
cli_codigo int primary key identity,
cli_nome varchar(50) not null,
cli_telefone varchar(14) not null,
cli_cpf varchar(14) not null unique
)

Então o certo seria fazer um:

select text from sys.messages
where message_id = @@error and language_id = 1046