Módulo 2 · SQL Server / Procedures — Capítulo 12

Organização e Nomenclatura

Consolidando tudo: como organizar dezenas (ou centenas) de procedures de um jeito que continua navegável um ano depois.

1. Por que isso importa mais do que parece

Escrever uma procedure correta é uma coisa; manter 200 delas organizadas, sem duplicação e fáceis de achar, é outra. Este capítulo consolida os hábitos que já apareceram espalhados nos capítulos anteriores num guia único de referência.

2. Convenção de nomenclatura (recapitulando e formalizando)

ElementoConvençãoExemplo
Procedureusp_<Entidade><Ação>usp_ClienteObter
Função escalarufn_<Descrição>ufn_CalcularIdade
Triggertrg_<Tabela>_<Evento>trg_Cliente_AuditarEmail
Tipo de tabela (TVP)<Entidade>TableTypeItemPedidoTableType
ParâmetroPascalCase, sem abreviação obscura@ClienteId, não @cid
Lembrete do capítulo 2

Nunca prefixe com sp_ — é reservado para procedures de sistema e causa overhead de busca na base master.

3. Um cabeçalho padrão de documentação

T-SQL não tem um sistema de documentação embutido como o XML doc do C#, mas um comentário estruturado no topo de cada procedure já resolve 90% do problema de "quem mexeu nisso e por quê":

SQL cabeçalho de documentação
-- =============================================
-- Procedure:   usp_ClienteAtualizar
-- Descrição:   Atualiza nome e e-mail de um cliente existente.
-- Parâmetros:  @Id     - Id do cliente a atualizar
--              @Nome   - Novo nome
--              @Email  - Novo e-mail
-- Retorno:     0 = sucesso; lança erro se o Id não existir
-- Autor:       Wellington Marunaka
-- Criado em:   2026-01-10
-- Alterado em: —
-- =============================================
CREATE PROCEDURE dbo.usp_ClienteAtualizar
    @Id    INT,
    @Nome  NVARCHAR(100),
    @Email NVARCHAR(150)
AS
BEGIN
    ...
END;
GO

4. Estrutura de pastas do projeto (versionamento)

Procedures deveriam viver em arquivos .sql versionados junto com o código C#, não só "dentro do banco". Uma estrutura comum:

📁 Database/ 📁 Tables/ Cliente.sql Pedido.sql 📁 Procedures/ usp_ClienteObter.sql usp_ClienteListar.sql usp_ClienteInserir.sql 📁 Triggers/

Fig. 1 — Um arquivo por objeto, agrupados por tipo — cada procedure com CREATE OR ALTER para ser reexecutável.

SQL CREATE OR ALTER — reexecutável com segurança
CREATE OR ALTER PROCEDURE dbo.usp_ClienteObter
    @Id INT
AS
BEGIN
    SET NOCOUNT ON;
    SELECT Id, Nome, Email FROM dbo.Cliente WHERE Id = @Id;
END;
GO
Dica

CREATE OR ALTER (SQL Server 2016+) substitui o padrão antigo de checar IF OBJECT_ID(...) IS NOT NULL DROP PROCEDURE ... antes de recriar. Rodar o mesmo arquivo .sql várias vezes (num pipeline de deploy, por exemplo) se torna seguro e idempotente.

5. Uma checklist antes de considerar uma procedure "pronta"

  • SET NOCOUNT ON; e SET XACT_ABORT ON; nas duas primeiras linhas (se houver escrita).
  • Nome segue usp_<Entidade><Ação>, nunca sp_.
  • Cabeçalho de documentação preenchido.
  • Parâmetros nomeados de forma clara, tipos com tamanho explícito (NVARCHAR(100), nunca NVARCHAR sem tamanho).
  • Escrita protegida por TRY/CATCH + transação quando necessário.
  • SQL dinâmico, se houver, usa sp_executesql + QUOTENAME.
  • Salva como arquivo .sql versionado, com CREATE OR ALTER.

6. Onde isso te leva

Com organização e nomenclatura fixadas, os dois últimos capítulos deste módulo fecham o ciclo: como chamar tudo isso de dentro do C# de forma limpa, e um projeto prático que junta cada peça vista até aqui.

📌 Resumo do capítulo

  • Convenção fixada: usp_ para procedures, ufn_ para funções, trg_ para triggers.
  • Um cabeçalho de comentário padronizado documenta propósito, parâmetros e histórico direto no arquivo .sql.
  • CREATE OR ALTER torna scripts de deploy idempotentes.
  • Procedures deveriam ser arquivos .sql versionados junto com o código da aplicação, não só objetos "soltos" no banco.

✏️ Praticando

  1. Reescreva todas as procedures criadas até aqui neste curso usando CREATE OR ALTER e o cabeçalho de documentação padrão.
  2. Organize-as em uma estrutura de pastas Database/Tables, Database/Procedures, Database/Triggers no seu editor de código.
  3. Passe a checklist da seção 5 em cada uma delas e corrija o que estiver faltando.