Rodrigo Fortes

"Só duas coisas são infinitas, o universo e a estupidez humana, mas não estou seguro sobre o primeiro"

Criação de Stored Procedure no SQL Server

Aqui vai algumas dicas para criar stored procedures no Microsoft SQL Server.

Primeiramente vamos ao conceito. Stored Procedure ou em portugues Procedimento Armazenado, é um conjunto de comandos em SQL dentro de um Banco de dados. Ela encapsula tarefas repetitivas, aceita parâmetros de entrada e retorna um valor de status. a stored procedure pode reduzir o tráfego na rede, melhorar a performance, criar mecanismos de segurança, etc.

Vamos ao código, sempre ao criar uma stored procedure, view, function e afins, verifico se elas já existem , caso existam dou um drop (delete) e crio novamente, abaixo explicarei o motivo disso.

Como verifico a existência de uma stored procedure na base de dados?

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['Nome da procedure']') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

Feito o if executo o drop

drop procedure [dbo].['Nome da procedure']

Coloco um 'GO' no final para continuar o cunjunto de instruções

Feito a verificação, crio a procedure e coloco as instruções que devem ser executadas.

create procedure 'Nome da procedure'
@parametro1 int,
@parametro2 int

É interessante criar a procedure encriptada, tornado assim os dados mais seguros, pois desta forma não sera possível a edição direta pelo banco de dados. Por este motivo antes de criar a procedure verifico a sua existência, pois se precisar alterar algo, deleto a antiga e crio uma nova. Como utilizo esta forma de criação, todas as procedures, views e functions devem ficar salvas em arquivos com acesso restrito (CVS por exemplo), para o caso de precisarem ser alteradas.

WITH ENCRYPTION AS

Caso queira deixar o código visível no banco de dados utiliza-se somente AS.

Agora declaro as variáveis

declare
@var1 int,
@var2 decimal(18,5),
@var3 varchar(30)

Coloco os comandos desejados

select @var1 = campo1 from tabela1 where campo2 = @parametro1

if @var1 > 0
update tabela2 set campo1 = @var1 where campo2 = @parametro2

go

E assim esta pronta uma stored procedure simples, lembrando que usei nomes genéricos somente para exemplificar, abaixo segue o código completo.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['Nome da procedure']') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].['Nome da procedure']
GO

create procedure 'Nome da procedure'
@parametro1 int,
@parametro2 int

WITH ENCRYPTION AS

declare
@var1 int,
@var2 decimal(18,5),
@var3 varchar(30)

select @var1 = campo1 from tabela1 where campo2 = @parametro1

if @var1 > 0
update tabela2 set campo1 = @var1 where campo2 = @parametro2

go