Como criar uma Stored Procedure Select, insert, delete e/ou update. SQL SERVER

(Creating a Stored Procedure Select, insert, delete and update. SQL SERVER)

Olá, webianos!

Hoje vou explicar como criar uma Stored Procedure em SQL SERVER. Sempre de forma resumida e sintetica.

Mas pq usar uma stored procedure?

1. Desempenho. Mais rapido que command sql, pois o procedimento de caminho ficar registrado no BD (Banco de dados). Assim quando vc  executar a stored procedure o BD não vai precisar mapear o caminho.
2. Manutenção. Imagine que vc tendo uma SP (stored procedure) que retorne só o campo nome de uma lista de produtos. Ai vc quer colocar o codigo do produto junto com o nome. Se usar uma procedure vc concatena o codigo do produto no nome dele, e pronto, onde exibia o nome agora exibirá codigo + nome.
3. Organização. Se utilizar só SP no seu projeto, os procedimento de dados ficará centralizado no BD e de aplicação na aplicação.
4. Tratamento de dados. Vc poderá fazer o tratamento de dados na camada de BD. Assim sua aplicação fica mais limpa, só chamando o SP. O procedimento de analise, work-flow é feito no próprio BD.
5. Camada BD. Para fazer manutenções não será necessario mexer na aplicação. Só alterar a SP e ja está tudo resolvido.

Existe varias razões para usar SP. É uma prática ja utilizada em grandes softwares.

Chega de blablabla, vamos ao que interessa, como criar uma Stored Procedure.

Vc pode utilizar um SP para fazer um procedimento de Select, Insert, Delete e/ou Update. Isso mesmo, vc pode ter um select e um insert na mesma SP. Vc pode usar “if” e regras de negocio dentro de uma SP.

1. Exemplo Select Simples:
CREATE PROCEDURE minhaSP
AS
BEGIN
SELECT * FROM minhaTabela
END

Observe que “minhaSP” eh o nome que vc cria para a procedure, pode ser qualquer nome, o importante é usar um nome semantico. Por exemplo, uma procedure que faz o login, use o nome “sp_login”, ou “sp_faz_login”.

2. Exemplo Select com parametros:
CREATE PROCEDURE minhaSP
@id int
AS
BEGIN
SELECT * FROM minhaTabela WHERE id=@id
END

3. Exemplo Select multiplos parametros:
CREATE PROCEDURE minhaSP
@cor varchar(100),
@placa varchar(100)
AS
BEGIN
SELECT * FROM Carro WHERE cor=@cor and placa=@placa
END

4. Exemplo Insert multiplos parametros:
CREATE PROCEDURE minhaSP
@cor varchar(100),
@placa varchar(100),
@marca varchar(200)
AS
BEGIN
INSERT INTO carro(marca, placa, cor)
VALUES(@marca,@placa,@cor)
END

5. Exemplo update multiplos parametros:
CREATE PROCEDURE minhaSP
@cor varchar(100),
@placa varchar(100),
@marca varchar(200)
AS
BEGIN
UPDATE carro SET cor=@cor, marca=@marca WHERE placa=@placa
END

6. Exemplo Select e Insert:
CREATE PROCEDURE minhaSP
@placa varchar(100)
AS
BEGIN
SELECT * FROM carro WHERE placa=@placa

INSERT INTO log_placa_pesquisada(placa)
VALUES(@placa)
END

7. Exemplo Select integrado Insert:
CREATE PROCEDURE minhaSP
@id int
AS
BEGIN
declare @placa varchar(100)
SELECT @placa=placa FROM carro WHERE id=@id

INSERT INTO log_placa_pesquisada(placa)
VALUES(@placa)
END

8. Exemplo Delete com parametros:
CREATE PROCEDURE minhaSP
@id int
AS
BEGIN
DELETE minhaTabela WHERE id=@id
END

9. Exemplo Delete com Insert:
CREATE PROCEDURE minhaSP
@id int
AS
BEGIN
DELETE minhaTabela WHERE id=@id

INSERT INTO log_delete(id)
VALUES(@id)
END

10. Exemplo Select Dinâmico: (colaboração de Sandro Lima)
CREATE PROCEDURE [dbo].[minhaSP]
@nome varchar(50),
@dataNascimento datetime,
@email varchar(100)
AS
DECLARE @sql varchar(900)
SET @SQL = ‘select * from tblUsuario where 1=1’
IF (@nome IS NOT NULL)
BEGIN
SET @SQL = @SQL + ‘ AND Nome = ‘+ QUOTENAME(@nome,””)
END

IF (@dataNascimento IS NOT NULL)
BEGIN
set @SQL = @SQL + ‘ AND dataNascimento = ‘ + QUOTENAME(@dataNascimento,””)
END

IF (@email IS NOT NULL)
BEGIN
set @SQL = @SQL + ‘ AND email = ‘ + QUOTENAME(@email,””)
END

exec(@SQL)

Exemplos de uso:
exec minhaSP sandro,null,null
exec minhaSP null,’2008-02-04′,null
exec minhaSP null,null,sandro.lima@asoec.com.br

Bom uso, e se tiver alguma dúvida deixe seu comentario com email para eu responder.

37 comentários sobre “Como criar uma Stored Procedure Select, insert, delete e/ou update. SQL SERVER

      • Mateus disse:

        Maicon , eu gostaria de ter um paramentro da procedure A na procedure B , como eu faço isso depois de ja feitas ,e via QuerySql

  1. EDMILSON DIAS SANTOS disse:

    TENTO EXECUTAR A ULTIMA PROCEDURE E RETORNA ESTAS MENSAGENS DE ERRO.

    Msg 156, Level 15, State 1, Procedure minhaSP, Line 7
    Incorrect syntax near the keyword ‘select’.
    Msg 137, Level 15, State 2, Procedure minhaSP, Line 10
    Must declare the scalar variable “@SQL”.
    Msg 137, Level 15, State 2, Procedure minhaSP, Line 15
    Must declare the scalar variable “@SQL”.
    Msg 137, Level 15, State 2, Procedure minhaSP, Line 20
    Must declare the scalar variable “@SQL”.
    Msg 137, Level 15, State 2, Procedure minhaSP, Line 23
    Must declare the scalar variable “@SQL”.

  2. HANIEL disse:

    OLA!!
    TENHO QUE FAZER UM SISTEMA DE LOCADORA, MAIS NÃO CONSIGO CRIAR UMA PROCEDURE DE INSERT, UPDATE E DELETE PARA A TABELA CLIENTE, PEÇO A AJUDA DE VCS.
    SOU GRATO PELA ATENÇÃO

  3. Endrigo disse:

    Olá, tem alguma maneira de fazer uma store procedure que me exiba todos os inserts que foram inseridos( das tabelas ) … em forma de comando, como se eu estivesse inserindo, só que eles já foram inseridos … Dessa maneira eu não precisaria ficar inserindo dados no banco toda vez que chega um versão do sistema pra teste, ai só executaria os inserts, seria uma mão na roda, abraço

  4. ALTEMIR disse:

    COMO POSSO CRIAR UMA SP ONDE DENTRO DO SELECT TENHO UMA SUBQUERY COM TABELA DINAMICA

    PRECISO PEGAR O CAMPO ID DO SELECT PARA MONTAR O NOME DA TABELA DO SUBSELECT

    ALGUEM JA FEZ ISSO?

    CREATE PROCEDURE SP_CTAS_APAGAR_CONTABIL
    (
    @ID_EMPRESA VARCHAR(3),
    @ANO_EXERCICIO VARCHAR(4)
    )
    AS
    BEGIN
    SET NOCOUNT ON
    DECLARE @_SLD VARCHAR(3)
    DECLARE @_ID VARCHAR(3)
    DECLARE @TBLSALDO VARCHAR(10)
    DECLARE @SQL_SP VARCHAR(1500)
    SET @_SLD = ”’SLD”’
    SET @_ID = ‘+”ID”+’
    SET @TBLSALDO = @_SLD+@_ID+@ANO_EXERCICIO
    SET @SQL_SP = ‘
    SELECT ID,
    (SELECT SUM(INICIAL+DMC01-CMC01+DMC02-CMC02+DMC03-CMC03+DMC04-CMC04+DMC05-CMC05+DMC06-CMC06+DMC07-CMC07+DMC08-CMC08+DMC09-CMC09+DMC10-CMC10+DMC11-CMC11+DMC12-CMC12)
    FROM ”’+LTRIM(@TBLSALDO)+”’
    WHERE LEFT(CODIGO,5)=”11111” AND LEN(CODIGO)>5) AS SALDO_CAIXA,

    (SELECT SUM(INICIAL+DMC01-CMC01+DMC02-CMC02+DMC03-CMC03+DMC04-CMC04+DMC05-CMC05+DMC06-CMC06+DMC07-CMC07+DMC08-CMC08+DMC09-CMC09+DMC10-CMC10+DMC11-CMC11+DMC12-CMC12)
    FROM ”’+LTRIM(@TBLSALDO)+”’
    WHERE LEFT(CODIGO,5)=”11121” AND LEN(CODIGO)>5) AS SALDO_BANCO ,

    (SELECT SUM(INICIAL+DMC01-CMC01+DMC02-CMC02+DMC03-CMC03+DMC04-CMC04+DMC05-CMC05+DMC06-CMC06+DMC07-CMC07+DMC08-CMC08+DMC09-CMC09+DMC10-CMC10+DMC11-CMC11+DMC12-CMC12)
    FROM ”’+LTRIM(@TBLSALDO)+”’
    WHERE LEFT(CODIGO,5)=”11122” AND LEN(CODIGO)>5) AS SALDO_APLICACAO
    FROM CLIENTE
    WHERE ID IN (SELECT EMPRESA FROM CLIENTE_GRUPO WHERE GRUPO=”’+@ID_EMPRESA+”’)’
    EXECUTE(@SQL_SP)
    END

  5. Lu disse:

    Será que vc poderia me ajudar? não sei se é exatamente isso que estou procurando, mas penso que vc possa me esclarecer..
    Bem, eu estou trabalhando em uma firma aqui na suíça e começando minha vida “profissional”, pois ainda não terminei os estudos de informática e por isso estou como estágiaria aqui nessa firma.
    Meu conhecimento na área de sql é muito pequeno, sei só o básico dos básicos, e meu chefe pediu pra que eu fizesse algumas mudanças em algumas informações para o cliente, como por exemplo o nr. do produto/artigo para outro.
    Coisa bem normal, mas como foram várias tabelas que tinham esse produto/artigo, tive que mudar em todas elas.
    Então me deram a sugestão de eu preparar um ‘script’, que eu entendi como procedure, para que eu não precisasse escrever tantas vezes os updates só pra uma tabela.. tudo bem que dessa vez eram só 4 produtos/artigos, mas eram 10 tabelas, ou seja, 40 vezes o update :/ se fossem mais, ficaria um bom tempo fazendo isso.
    Por isso ficaria muito grata se vc me ajudasse, pq não tô conseguindo não.
    Fico aguardando sua ajuda.

  6. Danilo disse:

    Eu posso usar um parametro para definir um campo na busca? Se sim, como eu faço?
    por exemplo:

    @Campo varchar(50)
    @Texto varchar(50)

    select * from TABELA where @campo = @texto

    • webmaicon disse:

      Sim, é possivel. Para isso vc terá que usar o EXEC.
      Veja no exemplo “10. Exemplo Select Dinâmico: (colaboração de Sandro Lima)”

      Abaixo um exemplo q fiz sem testar. Teste, corrija e nos envie.
      CREATE PROCEDURE [dbo].[minhaSP]
      @Campo varchar(50),
      @Texto varchar(50)
      AS
      DECLARE @sql varchar(900)
      SET @SQL = ‘select * from TABELA where ‘ + @Campo + ‘ = ‘ + @Texto
      END

      exec(@SQL)

      • Danilo disse:

        Não tinha pensado nesse modo, desculpe.
        Muito obrigado pela ajuda.

        Não consegui testar ainda pois não estou com meu note, mas no “olhometro” vai funcionar, só esta faltando uma aspa simples no final do @Texto.

        Chegando em casa vou testar e se funcionar eu aviso.
        Muito obrigado pelo post e por responder, primeiro blog que o autor responde e é educado.

  7. Ismael disse:

    Estou com a seguinte questão:

    Em um banco de dados de uma loja virtual existe uma tabela PRODUTOS.
    Toda vez que um determinado produto estiver com menos de 5 unidades em estoque,
    é desejado que seja inserido na tabela COMPRAS_REPOSICAO um registro com a descrição
    do produto para que o dono da loja possa providenciar o aumento do estoque.

    A partir dai eu criei a tabela Produtos

    create table produtos
    (
    id int not null unsigner auto_increment,
    descricao varchar (50),
    quantidade int,
    primary key (id)
    );

    create table compras_reposicao
    (
    id int not null auto_increment,
    produto varchar(50) ,
    primary key(id)

    );

    Criei a Stored Procedure para fazer o que o enunciado pede:

    CREATE PROCEDURE `PRODUTO_FALTANDO`()
    BEGIN

    DECLARE DES VARCHAR(50);

    SELECT @DES=DESCRICAO FROM PRODUTOS WHERE QUANTIDADE<5;

    INSERT INTO COMPRAS_REPOSICAO (PRODUTO) VALUES(@DES);

    END

    O código insere um nomo registro na tablea mas no campo produto o valor inserido é null. Só fica o ID que é auto incrementado.

    • webmaicon disse:

      Ola, ismael.

      Veja as seguintes dicas:

      1. use identificador unico por tabela, ou seja substituia “id” por “id_tabela”. exemplo: id_produtos, id_compras_reposicao
      2. na tabela produtos acrescente o campo “quantidade_tipo”, pra representar a “unidade” de medida da quantidade, existe produtos que são “unidades”, “caixas”, “pacotes”.. etc.
      3. Altere a tabela “compras_reposicao”, em vez de inserir o “produto”, insira o “id_produtos”. Assim se houver alteração no nome do produto não ficará com dois nomes em duas tabelas. Além disso ajudará na criação de relatorios.

  8. Elisa disse:

    Desculpa perguntar sou nova em TI,

    estou com uma duvida simples

    na parte da procedure

    CREATE PROCEDURE [dbo].[minhaSP]
    @nome varchar(50),
    @dataNascimento datetime,
    @email varchar(100)
    AS
    DECLARE @sql varchar(900)
    SET @SQL = ‘select * from tblUsuario where 1=1′
    IF (@nome IS NOT NULL)
    BEGIN
    SET @SQL = @SQL + ‘ AND Nome = ‘+ QUOTENAME(@nome,””)
    END

    porque “SET” o que significa o SET nesse caso?

  9. Claudio disse:

    Boa tarde Prezado,

    Pretendo criar uma rotina e gostaria de saber se posso fazer e como fazer com SP.

    Preciso que, sempre que gravarem um documento (FA – Fatura) que seja emitito para um destes clinetes (001, 002 e 003) ele me actualiza o campo ‘descricao’ da tabela ‘historico’ com o nome do cliente (descricao). Ou seja, existe uma tabela clientes, mas estes clientes em concreto são clientes diversos e quando se emite uma FA eles alteram o nome do cliente no documento. Mas o nome do cliente na tabela ‘cliente’ permanece, ele grava apenas numa outra tabela ‘cabecdoc’.

    Através de uma query consigo manualmente actualizar, mas gostaria de automatizar.

    Update Historico Set Descricao=(select nome from CabecDoc where TipoDoc=’FA’ and Serie=’2015′ and NumDoc=’75’)
    Where TipoDoc=’FA’ and Serie=’2017′ and NumDoc=’75’

    Grato pela atenção

    CD

  10. Daniel disse:

    Boa tarde amigo.
    Tenho vários bancos de dados BANCO_1(Principal) BANCO_2, _3, _4…(Empresas). Em todos os banco existe uma tabela empresa, quem possuem a mesma estrutura, no BANCO_1 tenho o cadastro de todas as empresa dos BANCO_2, _3, _4…! Gostaria de ao atualizar qualquer informação da Empresa no BANCO_1, os dados fossem atualizado na tabela empresa do BANCO_2 ou _3 ou _4.

    Ex.: Atualizei a Empresa Cod 1 no BANCO_1, as informações desta empresa fossem atualizadas no banco dela.

    Queria usar uma SP, mais não tenho muito familiaridade com o processo. Estou usando o MySql.

    É possível realizar esta ação?

    • webmaicon disse:

      Olá, daniel, bom dia.
      Vc precisa criar um trigger de Update na tabela Empresa do BANCO_1, chamando esta sua procedure para fazer a integração/sincronização.
      Para acessar os bancos use o prefixo junto com as tabelas, exemplo: update BANCO_2.Empresa SET ….

  11. Daniel disse:

    Bom dia Webmaicon, obrigado por ter respondido, será que poderia me ajudar neste questão.

    Consegui fazer editar e empresa, ao editar na Base Principal desta forma:

    DELIMITER $$
    USE `projects`$$
    DROP TRIGGER /*!50032 IF EXISTS */ `empresas_iguais`$$
    CREATE
    /*!50017 DEFINER = ‘root’@’localhost’ */
    TRIGGER `empresas_iguais` AFTER UPDATE ON `cs_empresas`
    FOR EACH ROW UPDATE empresaum.cs_empresas
    SET empresaum.cs_empresas.empresa_razao_social =
    NEW.empresa_razao_social,
    empresaum.cs_empresas.empresa_nome_fantasia =
    NEW.empresa_nome_fantasia,
    empresaum.cs_empresas.empresa_db_host = NEW.empresa_db_host,
    empresaum.cs_empresas.empresa_db_user = NEW.empresa_db_user,
    empresaum.cs_empresas.empresa_db_password = NEW.empresa_db_password,
    empresaum.cs_empresas.empresa_db_nome = NEW.empresa_db_nome,
    empresaum.cs_empresas.empresa_tipo = NEW.empresa_tipo,
    empresaum.cs_empresas.empresa_cnpj_cpf = NEW.empresa_cnpj_cpf,
    empresaum.cs_empresas.empresa_contato = NEW.empresa_contato,
    empresaum.cs_empresas.empresa_email = NEW.empresa_email,
    empresaum.cs_empresas.empresa_telefone = NEW.empresa_telefone,
    empresaum.cs_empresas.empresa_celular = NEW.empresa_celular,
    empresaum.cs_empresas.empresa_logo = NEW.empresa_logo,
    empresaum.cs_empresas.empresa_registro = NEW.empresa_registro,
    empresaum.cs_empresas.empresa_level = NEW.empresa_level,
    empresaum.cs_empresas.empresa_status = NEW.empresa_status
    WHERE empresaum.cs_empresas.empresa_id = NEW.empresa_id;
    $$
    DELIMITER;
    Onde empresaum É o banco BANCO_1. Como posso colocar este valor empresaum dinâmico, de acordo do a o campo empresa_db_nome que existe no cadastro da empresa na base principal, fazendo assim com que atualize a empresa no banco que ela se encontra cadastrada. Pode dar uma luz? Por favor!

    • Daniel disse:

      Bom dia Webmaicon, obrigado por ter respondido, será que poderia me ajudar neste questão.

      Consegui fazer editar e empresa, ao editar na Base Principal desta forma:

      DELIMITER $$
      USE `projects`$$
      DROP TRIGGER /*!50032 IF EXISTS */ `empresas_iguais`$$
      CREATE
      /*!50017 DEFINER = ‘root’@’localhost’ */
      TRIGGER `empresas_iguais` AFTER UPDATE ON `cs_empresas`
      FOR EACH ROW UPDATE empresaum.cs_empresas
      SET empresaum.cs_empresas.empresa_razao_social =
      NEW.empresa_razao_social,
      empresaum.cs_empresas.empresa_nome_fantasia =
      NEW.empresa_nome_fantasia,
      empresaum.cs_empresas.empresa_db_host = NEW.empresa_db_host,
      empresaum.cs_empresas.empresa_db_user = NEW.empresa_db_user,
      empresaum.cs_empresas.empresa_db_password = NEW.empresa_db_password,
      empresaum.cs_empresas.empresa_db_nome = NEW.empresa_db_nome,
      empresaum.cs_empresas.empresa_tipo = NEW.empresa_tipo,
      empresaum.cs_empresas.empresa_cnpj_cpf = NEW.empresa_cnpj_cpf,
      empresaum.cs_empresas.empresa_contato = NEW.empresa_contato,
      empresaum.cs_empresas.empresa_email = NEW.empresa_email,
      empresaum.cs_empresas.empresa_telefone = NEW.empresa_telefone,
      empresaum.cs_empresas.empresa_celular = NEW.empresa_celular,
      empresaum.cs_empresas.empresa_logo = NEW.empresa_logo,
      empresaum.cs_empresas.empresa_registro = NEW.empresa_registro,
      empresaum.cs_empresas.empresa_level = NEW.empresa_level,
      empresaum.cs_empresas.empresa_status = NEW.empresa_status
      WHERE empresaum.cs_empresas.empresa_id = NEW.empresa_id;
      $$
      DELIMITER;
      Onde empresaum É o banco BANCO_1. Como posso colocar este valor empresaum dinâmico, de acordo do a o campo empresa_db_nome que existe no cadastro da empresa na base principal, fazendo assim com que atualize a empresa no banco que ela se encontra cadastrada. Pode dar uma luz? Por favor!

      • Daniel disse:

        Desculpe, tentei deixar mais claro agora. E obrigado por estar tentando me ajudar.

        USE `projects`$$ ==> (“`projects`” – Aqui tenho todas as Empresa cadastradas é o BANCO_1(Principal)).

        FOR EACH ROW UPDATE empresaum.cs_empresas ==>(“empresaum.” – Aqui é o banco da empresa que quero atualizar as informações (Banco da Empresa BANCO_2, ou BANCO_3 ou BANCO_4…)
        de acordo com a epresa que for editada no BANCO_1(Principal), nessa trigger o valor está fixo, preciso deixar dinâmico).
        De acordo com o campo empresa_db_nome que existe no cadastro da empresa no BANCO_1(Principal), fazendo assim com que atualize a empresa as informações no
        Banco da Empresa BANCO_2, ou BANCO_3 ou BANCO_4…) que ela se encontra cadastrada.

        Dá para fazer isso?

      • webmaicon disse:

        Quando eu falei texto legivel é pq tem muito erro de digitação, ai não da para entender.
        Enfim, pelo que entendi, vc quer saber se tem como fazer o update inteiro com todas as colunas da outra tabela (ou banco). Não tem como, vc precisa especificar cada coluna que terá o upload.
        Vc esta executando os comandos update dentro da trigger, minha sugestão enviada é vc criar uma Procedure e chamar ela dentro da Trigger passando os parametros (registro e tabela), assim vc terá em um unico lugar este codigo de update, facilitando a manutenção e reutilização deste Procedure.

      • Daniel disse:

        Boa noite, estudando maus um pouco e cheguei a este resultado.

        DELIMITER $$
        CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        TRIGGER `projects`.`empresas_iguais` AFTER UPDATE
        ON `projects`.`cs_empresas`
        FOR EACH ROW BEGIN
        IF ((NEW.empresa_razao_social OLD.empresa_razao_social)
        OR(NEW.empresa_nome_fantasia OLD.empresa_nome_fantasia)
        OR(NEW.empresa_db_host OLD.empresa_db_host)
        OR(NEW.empresa_db_user OLD.empresa_db_user)
        OR(NEW.empresa_db_password OLD.empresa_db_password)
        OR(NEW.empresa_db_nome OLD.empresa_db_nome)
        OR(NEW.empresa_tipo OLD.empresa_tipo)
        OR(NEW.empresa_cnpj_cpf OLD.empresa_cnpj_cpf)
        OR(NEW.empresa_contat OLD.empresa_contat)
        OR(NEW.empresa_email OLD.empresa_email)
        OR(NEW.empresa_telefone OLD.empresa_telefone)
        OR(NEW.empresa_celular OLD.empresa_celular)
        OR(NEW.empresa_logo OLD.empresa_logo)
        OR(NEW.empresa_registro OLD.empresa_registro)
        OR(NEW.empresa_level OLD.empresa_level)
        OR(NEW.empresa_status OLD.empresa_status))
        THEN
        SET @DB_EMPRESA = (SELECT empresa_db_nome FROM cs_empresas WHERE empresa_id = OLD.empresa_id);
        IF @DB_EMPRESA != “”
        THEN
        SET @DB_EMPRESA.cs_empresas.empresa_razao_social = NEW.empresa_razao_social,
        @DB_EMPRESA.cs_empresas.empresa_nome_fantasia = NEW.empresa_nome_fantasia,
        @DB_EMPRESA.cs_empresas.empresa_db_host = NEW.empresa_db_host,
        @DB_EMPRESA.cs_empresas.empresa_db_user = NEW.empresa_db_user,
        @DB_EMPRESA.cs_empresas.empresa_db_password = NEW.empresa_db_password,
        @DB_EMPRESA.cs_empresas.empresa_db_nome = NEW.empresa_db_nome,
        @DB_EMPRESA.cs_empresas.empresa_tipo = NEW.empresa_tipo,
        @DB_EMPRESA.cs_empresas.empresa_cnpj_cpf = NEW.empresa_cnpj_cpf,
        @DB_EMPRESA.cs_empresas.empresa_contato = NEW.empresa_contato,
        @DB_EMPRESA.cs_empresas.empresa_email = NEW.empresa_email,
        @DB_EMPRESA.cs_empresas.empresa_telefone = NEW.empresa_telefone,
        @DB_EMPRESA.cs_empresas.empresa_celular = NEW.empresa_celular,
        @DB_EMPRESA.cs_empresas.empresa_logo = NEW.empresa_logo,
        @DB_EMPRESA.cs_empresas.empresa_registro = NEW.empresa_registro,
        @DB_EMPRESA.cs_empresas.empresa_level = NEW.empresa_level,
        @DB_EMPRESA.cs_empresas.empresa_status = NEW.empresa_status
        WHERE @DB_EMPRESA.cs_empresas.empresa_id = OLD.empresa_id;

        END IF;
        END IF;
        END$$
        DELIMITER ;

        Porém está me retornando o seguinte erro:

        1 queries executed, 0 success, 1 errors, 0 warnings

        Query: CREATE TRIGGER `projects`.`empresas_iguais` AFTER UPDATE ON `projects`.`cs_empresas` FOR EACH ROW BEGIN if ((NEW.empresa_razao_s…

        Error Code: 1064
        You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘WHERE @DB_EMPRESA.cs_empresas.empresa_id = OLD.empresa_id;

        end if;
        ‘ at line 42

        Execution Time : 0 sec
        Transfer Time : 0 sec
        Total Time : 0.001 sec

  12. Evandro disse:

    Boa noite. Aminha dúvida é bem “tosca”, mas talvez seja a dúvida de muitos (desculpe a ignorância):
    – O que quer dizer 1=1 no final da Stored Procedure?

    • webmaicon disse:

      1=1, true=true, 0=0… não significa nada, ou seja… 1=1 == true/verdadeira. Não é recomendado fazer isso, mas muitos programações que criam suas querys dinamicamente deixa este 1=1 pra facilitar a montagem do WHERE adicionamento os proximos comandos colocando “and” no inicio.
      Por exemplo:
      SELECT * FROM usuarios WHERE 1=1 [aqui o programador coloca as opcoes de where com “and” no inicio]

      Em php:
      $query = “SELECT * FROM usuarios WHERE 1=1″;
      if ($filtrar==”nome”) {
      $query = $query. ‘ and nome like %”.$nome.”%’;
      }
      Resultando em: SELECT * FROM usuarios WHERE 1=1 and nome like $nome
      Se nao tivesse o 1=1, daria erro de sintaxe.

      Deu pra entender?

Deixar mensagem para Danilo Cancelar resposta