Usuário com melhor resposta
Proc - Insert/Update

Pergunta
-
Bom dia galera,
Tenho a seguinte proc aqui:
Code BlockALTER
procedure [dbo].[Stpprv_AplTIPOOPERACAO_GRUPO_Gravar]@intCodTipoOperacaoGrupo
int = null,@vchrDscTipoOperacaoGrupo varchar
(50) = null,@dateDataRegistro
datetime = null,@tinyAtivo
tinyint = null,@intCodTipoOperacaoGrupoRet
int outputas
set
nocount ondeclare
@intReturnValue
int,@intRowsAffected
int,@bitControlTransaction
bitbegin
if (@@trancount = 0) begin set @bitControlTransaction = 1 begin transaction end update TIPOOPERACAO_GRUPO setDscTipoOperacaoGrupo
= @vchrDscTipoOperacaoGrupo,Ativo
= @tinyAtivo whereCodTipoOperacaoGrupo
= @intCodTipoOperacaoGrupo select@intReturnValue
= @@error,@intRowsAffected
= @@rowcount set @intCodTipoOperacaoGrupoRet=@intCodTipoOperacaoGrupo if ((@intRowsAffected = 0) and (@intReturnValue = 0)) begin select @dateDataRegistro = isnull(@dateDataRegistro, getdate()) insert into TIPOOPERACAO_GRUPO (CodTipoOperacaoGrupo
,DscTipoOperacaoGrupo
,DataRegistro
,Ativo
) values (@intCodTipoOperacaoGrupo
,@vchrDscTipoOperacaoGrupo
,@dateDataRegistro
,@tinyAtivo
) set @intReturnValue = @@error Select @intCodTipoOperacaoGrupo = IDENT_CURRENT('TIPOOPERACAO_GRUPO') set @intCodTipoOperacaoGrupoRet = @intCodTipoOperacaoGrupo end select@intReturnValue RETORNO
if (@bitControlTransaction = 1) begin if (@intReturnValue <> 0) begin rollback transaction end else begin commit transaction end endend
set
nocount offreturn
Basicamente os update funcionam, mas não consigo fazer um Insert, eu passo os parâmetros assim:
Code BlockStpprv_AplTIPOOPERACAO_GRUPO_Gravar null,'TESTE','2007/11/19 10:15:39',1,null
Ocorre o seguinte erro: "Canot insert the explicit value for identity column in table..."Basicamente eu entendi que não posso passar um valor para uma coluna identity, mas como eu poderia executar esta proc?
Respostas
-
Olá Rick,
Você deve basicamente omitir a coluna com identity no seu insert, exemplo, se eu tiver uma tabela de pessoas com duas colunas, codigoPessoa e nomePessoa, o codigoPessoa tem identity, na hora de fazer insert temos que fazer assim:
INSERT INTO Pessoa (nomePessoa)
VALUES (@nomePessoa)
E claro, se quiser passar um valor especifico pode usar o SET IDENTITY_INSERT NomeDaTabela ON, assim ele vai permitir que se insira valores diretamente na coluna.
Se tiver qualquer problema, retorne.
Abraço
Todas as Respostas
-
Bom dia Rick
Você pode incluir registros em uma coluna identity sim, mas para isso você precisa utilizar o comando SET IDENTITY_INSERT. No seu caso ficaria assim
SET IDENTITY_INSERT dbo.TipoOperacao_Grupo ON
insert into TIPOOPERACAO_GRUPO (
CodTipoOperacaoGrupo
,DscTipoOperacaoGrupo
,DataRegistro
,Ativo
) values (@intCodTipoOperacaoGrupo
,@vchrDscTipoOperacaoGrupo
,@dateDataRegistro
,@tinyAtivo
)SET IDENTITY_INSERT dbo.TipoOperacao_Grupo OFF
Espero ter ajudado
-
Olá Rick,
Você deve basicamente omitir a coluna com identity no seu insert, exemplo, se eu tiver uma tabela de pessoas com duas colunas, codigoPessoa e nomePessoa, o codigoPessoa tem identity, na hora de fazer insert temos que fazer assim:
INSERT INTO Pessoa (nomePessoa)
VALUES (@nomePessoa)
E claro, se quiser passar um valor especifico pode usar o SET IDENTITY_INSERT NomeDaTabela ON, assim ele vai permitir que se insira valores diretamente na coluna.
Se tiver qualquer problema, retorne.
Abraço
-
-