Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Figueredo

Executar Stored Procedure dentro de outra.

Recommended Posts

Olá a todos,

 

estou desenvolendo uma aplicação, cujo, banco de dados, tem um ID do banco mesmo, e uma ID Interna (por entidade).

Tipo, a tabela seria algo assim:

 

===========================================================

 

id BIGINT NOT NULL IDENTITY(1,1),

idEntidade BIGINT NOT NULL,

idInterna BIGINT NOT NULL,

descricao VARCHAR(100) NOT NULL,

 

CONSTRAINT pk_tabela_teste PRIMARY KEY (id),

CONSTRAINT fk_entidade_teste FOREIGN KEY (idEntidade) REFERENCES entidades(id)

 

===========================================================

 

Esse seria o escopo de uma tabela.

 

Minha dúvida é, eu vou ter SPs (Stored Procedures) que farão todo o trabalho de inserção, consulta, atualização e remoção.

Porém, estou tendo dificuldade de criar idInterna através de SP de insert.

 

Tipo, eu quero que, ao chamar o SP de INSERT, nela, ter o código para chamar uma store procedure que traz uma nova idInterna.

 

Vou colocar em código ficará mais fácil:

 

============================================================

CREATE PROCEDURE [dbo].[sp_next_idInterna]

@tablename VARCHAR(50),

@id_entidade BIGINT

AS

BEGIN

 

DECLARE @query VARCHAR

SET @query = 'SELECT (MAX(id_interna) + 1) as next_id'

SET @query = @query + 'FROM ''' + CAST(@tablename AS VARCHAR) + ''''

SET @query = @query + 'WHERE id_interna = ' + CAST(@id_entidade AS VARCHAR)

 

EXEC @query

END

============================================================

 

============================================================

CREATE PROCEDURE [dbo].[sp_insert_tabela_teste]

@idEntidade BIGINT,

@descricao VARCHAR(100)

AS

BEGIN

DECLARE @id_interna BIGINT

EXEC @id_interna = [dbo].[sp_next_idInterna]

@tablename = 'tabela_teste',

@id_entidade = @idEntidade

 

INSERT INTO tabela_teste (idEntidade, idInterna, descricao) VALUES (@idEntidade, @id_interna, @descricao)

END

============================================================

 

Eu queria conseguir chamar a SP assim, porém não funciona, dá problema.

Ou, caso tenham alguma idéia melhor, estou aceitando outras propostas.

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia dar um Return na procedure

 

CREATE PROCEDURE [TESTE_CODIGO] ( @cod INTEGER OUTPUT)
AS 
BEGIN
  SELECT @cod = MAX(Codigo)+1 FROM TABELA


  RETURN
END

Aí daria pra chamar assim:

 

DECLARE @id INTEGER
EXEC TESTE_CODIGO @id OUTPUT

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.