Ir para conteúdo

POWERED BY:

Arquivado

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

acfelipesilva

Montar uma stored procedure...

Recommended Posts

Olá Gente,Estou dando manutenção em um sistema, e o mesmo possui alguns scripts asp que estarei substituindo por stored procedured, mas como não estou acostumado com a manipulação de dados com sql server (tô novo nesse negócio)... Peço ajuda de vcs para darem algumas idéias de como substituir a instrução a seguir:Código que existe hoje

inserir = "Set nocount on insert into tbresenha values(" + processo + "," 			  inserir = inserir + vara + ",'" + dtaent + "','1753-01-01 00:00:00.000','"  			  inserir = inserir + materia + "','" + arquivo + "','',0,'1753-01-01 00:00:00.000',0,'" 			  inserir = inserir + login + "','"+ hoje + "','1753-01-01 00:00:00.000')"
Código que montei porém tem alguns erros, e gostaria da opinição de vcs para melhorá-lo
CREATE PROCEDURE SP_InclusaoSecretariaResenha@numRes_NumProc varchar(50),@numRes_NumVar int,@dtmRes_DatRes datetime,@vchRes_MatJur varchar(20),@ResDestinacao varchar(10),@vchRes_Anexo varchar(255),@vchRes_UsuCod varchar(50)as												set nocount on declare  @dtmAdv_datuma datetimeset @dtmAdv_datuma=getdate()IF NOT EXISTS (SELECT * FROM tbResenha WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar)  BEGIN	INSERT INTO numRes_NumProc, numRes_NumVar, Convert(char(10), dtmRes_DatRes,103) as 'dtmRes_DatRes','1753-01-01 00:00:00.000',			vchRes_MatJur, vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,		vchRes_UsuCod,dtmAdv_datuma,'1753-01-01 00:00:00.000'	IF @@ERROR=0		  BEGIN		COMMIT TRAN	  END	ELSE	  BEGIN		ROLLBACK	END 		   	  ENDELSE  BEGIN	BEGIN TRAN	  UPDATE tbResenha	  SET numRes_NumProc = @numRes_NumProc 	  ,numRes_NumVar = @numRes_NumVar 	  ,dtmRes_DatRes = @dtmRes_DatRes	  ,vchRes_MatJur = @vchRes_MatJur	  ,ResDestinacao = @ResDestinacao	  ,vchRes_Anexo = @vchRes_Anexo	  ,vchRes_UsuCod = @vchRes_UsuCod	  WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar	  IF @@ERROR = 0	 END   ENDEND
Os erros que aparecem são esses:

Server: Msg 170, Level 15, State 1, Procedure SP_InclusaoSecretariaResenha, Line 21Line 21: Incorrect syntax near ','.Server: Msg 156, Level 15, State 1, Procedure SP_InclusaoSecretariaResenha, Line 46Incorrect syntax near the keyword 'END'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionando mais informações para subsidiá-los da situação...Base de Dados SQL Server 2000TABLE [tbResenha] [numRes_NumProc] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,[numRes_NumVar] [numeric](18, 0) NOT NULL ,[dtmRes_DatRes] [datetime] NOT NULL ,[dtmRes_DatEnc] [datetime] NULL ,[vchRes_MatJur] [varchar] (20) COLLATE Latin1_General_CI_AS NULL ,[vchRes_Anexo] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,[chrRes_StaVis] [char] (1) COLLATE Latin1_General_CI_AS NULL ,[numRes_EncAdv] [numeric](18, 0) NULL ,[dtmRes_Prz] [datetime] NULL ,[numRes_Aviso] [numeric](18, 0) NULL ,[vchRes_UsuCod] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,[dtmRes_DatAtu] [datetime] NULL ,[dtmRes_DatVis] [datetime] NULL ,[ResDestinacao] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, Eriva!

 

Conforme sugerido modifiquei as instruções conforma abaixo, agora tá dando um erro na instrução convert...

 

 

 

CREATE PROCEDURE SP_InclusaoSecretariaResenha@numRes_NumProc varchar(50),@numRes_NumVar int,@dtmRes_DatRes datetime = '1753-01-01',@vchRes_MatJur varchar(20),@ResDestinacao varchar(10),@vchRes_Anexo varchar(255),@vchRes_UsuCod varchar(50)as set nocount on declare @dtmAdv_datuma datetimeset @dtmAdv_datuma=getdate()IF NOT EXISTS (SELECT * FROM tbResenha WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar)BEGININSERT INTO tbResenha (numRes_NumProc, numRes_NumVar, Convert(char(10), dtmRes_DatRes,103) as 'dtmRes_DatRes','1753-01-01 00:00:00.000',vchRes_MatJur, vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,vchRes_UsuCod,dtmAdv_datuma,'1753-01-01 00:00:00.000')VALUES (numRes_NumProc, numRes_NumVar, Convert(char(10), dtmRes_DatRes,103) as 'dtmRes_DatRes','1753-01-01 00:00:00.000',vchRes_MatJur, vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,vchRes_UsuCod,dtmAdv_datuma,'1753-01-01 00:00:00.000')IF @@ERROR=0 COMMIT TRANELSEROLLBACKEND ELSEBEGINBEGIN TRANUPDATE tbResenhaSET numRes_NumProc = @numRes_NumProc 	   ,numRes_NumVar = @numRes_NumVar 	   ,dtmRes_DatRes = @dtmRes_DatRes	   ,vchRes_MatJur = @vchRes_MatJur	   ,ResDestinacao = @ResDestinacao	   ,vchRes_Anexo = @vchRes_Anexo	   ,vchRes_UsuCod = @vchRes_UsuCod	   WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVarIF @@ERROR=0 COMMIT TRANEND

Compartilhar este post


Link para o post
Compartilhar em outros sites

no comando INSERT INTO você define somente os campos e depois os valores em VALUES, dai sim você pode usar os comandos de convert, getdate() etc.

 

Exemplo:

INSERT INTO (campo1, campo2, campo3, campo4, campo5, campo6)VALUES (@valor1, @valor2, @valor3, getdate(), convert(int,@valor5), @valor6)

t++

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Eriva,A instrução ficou assim...

CREATE PROCEDURE SP_InclusaoSecretariaResenha@numRes_NumProc varchar(50),@numRes_NumVar int,@dtmRes_DatRes datetime = '1753-01-01',@vchRes_MatJur varchar(20),@ResDestinacao varchar(10),@vchRes_Anexo varchar(255),@vchRes_UsuCod varchar(50)as set nocount on declare @dtmAdv_datuma datetimeset @dtmAdv_datuma=getdate()IF NOT EXISTS (SELECT * FROM tbResenha WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar) BEGIN  INSERT INTO tbResenha (numRes_NumProc, numRes_NumVar, dtmRes_DatRes,dtmRes_DatEnc,vchRes_MatJur, vchRes_Anexo,chrRes_StaVis,numRes_EncAdv,dtmRes_Prz,numRes_Aviso,vchRes_UsuCod,dmAdv_datuma,dtmRes_DatVis,ResDestinacao)  VALUES (@numRes_NumProc, @numRes_NumVar, Convert(char(10), @dtmRes_DatRes,103) as 'dtmRes_DatRes','1753-01-01 00:00:00.000',@vchRes_MatJur, @vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,@vchRes_UsuCod,@dtmAdv_datuma,'1753-01-01 00:00:00.000',@ResDestinacao)   IF @@ERROR=0 	COMMIT TRAN   ELSE	ROLLBACK   END ELSE BEGIN  BEGIN TRAN   UPDATE tbResenhaSET numRes_NumProc = @numRes_NumProc 	   ,numRes_NumVar = @numRes_NumVar 	   ,dtmRes_DatRes = @dtmRes_DatRes	   ,vchRes_MatJur = @vchRes_MatJur	   ,ResDestinacao = @ResDestinacao	   ,vchRes_Anexo = @vchRes_Anexo	   ,vchRes_UsuCod = @vchRes_UsuCod	   WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar   IF @@ERROR=0  COMMIT TRANEND
Apresentou um erro na conversão da data..

Server: Msg 156, Level 15, State 1, Procedure SP_InclusaoSecretariaResenha, Line 21Incorrect syntax near the keyword 'as'.

Como elimino esse erro?Um abraço e obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como elimino esse erro?

 

Um abraço e obrigado,

retira o Alias (AS).... esse aqui: as 'dtmRes_DatRes'

a instrução INSERT INTO ... VALUES não tem alias

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Eriva,Cara, fiz as alterações abaixo, estou tendo porblemas agora com o campo dtmAdv_datuma, trata-se um campo que grava a data da última atualização (data atual), bom, ele está declarado na procedure, mas mesmo assim continua impedindo que ela seja executada, tu tens idéia de como se resolver isso????Obrigado mais uma vez,

CREATE PROCEDURE SP_InclusaoSecretariaResenha@numRes_NumProc varchar(50),@numRes_NumVar int,@dtmRes_DatRes datetime = '1753-01-01',@vchRes_MatJur varchar(20),@ResDestinacao varchar(10),@vchRes_Anexo varchar(255),@vchRes_UsuCod varchar(50)as set nocount on declare @dtmAdv_datuma datetimeset @dtmAdv_datuma=getdate()IF NOT EXISTS (SELECT * FROM tbResenha WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar) BEGIN INSERT INTO tbResenha (numRes_NumProc, numRes_NumVar, dtmRes_DatRes,dtmRes_DatEnc,vchRes_MatJur, vchRes_Anexo,chrRes_StaVis,numRes_EncAdv,dtmRes_Prz,numRes_Aviso,vchRes_UsuCod,dmAdv_datuma,dtmRes_DatVis,ResDestinacao) VALUES (@numRes_NumProc, @numRes_NumVar,@dtmRes_DatRes,'1753-01-01 00:00:00.000',@vchRes_MatJur, @vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,@vchRes_UsuCod,@dtmAdv_datuma,'1753-01-01 00:00:00.000',@ResDestinacao) IF @@ERROR=0 COMMIT TRAN ELSE ROLLBACK END ELSE BEGIN BEGIN TRAN UPDATE tbResenhaSET numRes_NumProc = @numRes_NumProc ,numRes_NumVar = @numRes_NumVar ,dtmRes_DatRes = @dtmRes_DatRes ,vchRes_MatJur = @vchRes_MatJur ,ResDestinacao = @ResDestinacao ,vchRes_Anexo = @vchRes_Anexo ,vchRes_UsuCod = @vchRes_UsuCod WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar IF @@ERROR=0 COMMIT TRANEND

Erro

Code SnippetServer: Msg 207, Level 16, State 1, Procedure SP_InclusaoSecretariaResenha, Line 20Invalid column name 'dtmAdv_datuma'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Code SnippetServer: Msg 207, Level 16, State 1, Procedure SP_InclusaoSecretariaResenha, Line 20Invalid column name 'dtmAdv_datuma'.

este erro significa que essa coluna "no ecziste"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pô Eriva, beleza pela dica... realmente era o campo existe mas não é dessa tabela (sou um beócio mesmo, rs)...Bom, o caso é que rolou quase perfeito tá dando um erro no commit... O que devo fazer????

Server: Msg 3902, Level 16, State 1, Procedure SP_InclusaoSecretariaResenha, Line 23The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

O código é esse
ALTER  PROCEDURE SP_InclusaoSecretariaResenha@numRes_NumProc varchar(50),@numRes_NumVar int,@dtmRes_DatRes datetime = '1753-01-01',@vchRes_MatJur varchar(20),@ResDestinacao varchar(10),@vchRes_Anexo varchar(255),@vchRes_UsuCod varchar(50)as set nocount on declare @dtmRes_DatAtu datetimeset @dtmRes_DatAtu = getdate()IF NOT EXISTS (SELECT * FROM tbResenha WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar) BEGIN   INSERT INTO tbResenha (numRes_NumProc, numRes_NumVar, dtmRes_DatRes,dtmRes_DatEnc,vchRes_MatJur, vchRes_Anexo,chrRes_StaVis,numRes_EncAdv,dtmRes_Prz,numRes_Aviso,vchRes_UsuCod,dmRes_DatAtu,dtmRes_DatVis,ResDestinacao)  VALUES (@numRes_NumProc, @numRes_NumVar,@dtmRes_DatRes,'1753-01-01 00:00:00.000',@vchRes_MatJur, @vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,@vchRes_UsuCod,@dtmRes_DatAtu,'1753-01-01 00:00:00.000',@ResDestinacao)   IF @@ERROR=0 	COMMIT TRAN   ELSE	ROLLBACK   END ELSE BEGIN  BEGIN TRAN   UPDATE tbResenhaSET numRes_NumProc = @numRes_NumProc 	   ,numRes_NumVar = @numRes_NumVar 	   ,dtmRes_DatRes = @dtmRes_DatRes	   ,vchRes_MatJur = @vchRes_MatJur	   ,ResDestinacao = @ResDestinacao	   ,vchRes_Anexo = @vchRes_Anexo	   ,vchRes_UsuCod = @vchRes_UsuCod	   WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar   IF @@ERROR=0  COMMIT TRANEND

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o eriva_br me permite...

 

Está última mensagem indica que o o COMMIT do insert não está sendo executado, pois você não iniciou a transação !

 

Inicie a transação que tudo deve funcionar...

 

::IF NOT EXISTS (SELECT * FROM tbResenha WHERE numRes_NumProc = @numRes_NumProc and numRes_NumVar = @numRes_NumVar)BEGIN  [color="#FF0000"]BEGIN TRAN[/color]  INSERT INTO tbResenha (numRes_NumProc, numRes_NumVar, dtmRes_DatRes,dtmRes_DatEnc,vchRes_MatJur, vchRes_Anexo,chrRes_StaVis,numRes_EncAdv,dtmRes_Prz,numRes_Aviso,vchRes_UsuCod,dmRes_DatAtu,dtmRes_DatVis,ResDestinacao)  VALUES (@numRes_NumProc, @numRes_NumVar,@dtmRes_DatRes,'1753-01-01 00:00:00.000',@vchRes_MatJur, @vchRes_Anexo,'',0,'1753-01-01 00:00:00.000',0,@vchRes_UsuCod,@dtmRes_DatAtu,'1753-01-01 00:00:00.000',@ResDestinacao)   IF @@ERROR=0	COMMIT TRAN   ELSE	ROLLBACK   ENDELSE::

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o eriva_br me permite...

Olá MisterPe, tudo beleza?

 

sinta-se a vontade, o fórum é nosso...rss

percebi que vem contribuindo com a comunidade com posts de alta qualidade, muito bacana, toda a ajuda é sempre bem-vinda

 

 

abraços

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

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.