none
Erro em criação de trigger RRS feed

  • Pergunta

  • create trigger log_ins_tbfunc on dbo.tbfunc with encryption after insert
    AS
    begin
    	insert	into dbo.LOG_TBFUNC
    	select	CURRENT_TIMESTAMP	--Timestamp		,	not null
    	,		CURRENT_USER		--Varchar(50)	,	not null
    	,		'I'					--Varchar(01)	,	not null
    	,		cpf					--Varchar(18)	,	not null
    	,		nome				--Varchar(50)	,	not null
    	,		profissao			--Varchar(50)	,	not null
    	,		nascimento			--Date			,	not null
    	from    inserted
    end;
    
    --Msg 273, Level 16, State 1, Procedure log_ins_tbfunc, Line 4
    --Cannot insert an explicit value into a timestamp column. Use INSERT with a column list to exclude the timestamp column, or insert a DEFAULT into the timestamp column.
    
    quarta-feira, 28 de outubro de 2015 01:54

Respostas

Todas as Respostas

  • Boa noite,

    Você não pode inserir um valor explícito num campo com data type Timestamp. Para resolver o problema, liste os campos no Insert removendo o campo Timestamp, pois o valor é calculado automaticamente.

    Exemplo:

    create trigger log_ins_tbfunc on dbo.tbfunc with encryption after insert
    AS
    begin
    	insert	into dbo.LOG_TBFUNC
    	(
    	  UserName
    	 ,UpdateType
    	 ,cpf
    	 ,nome
    	 ,profissao
    	 ,nascimento
    	) 
    	select	CURRENT_USER		--Varchar(50)	,	not null
    	,		'I'		--Varchar(01)	,	not null
    	,		cpf		--Varchar(18)	,	not null
    	,		nome		--Varchar(50)	,	not null
    	,		profissao	--Varchar(50)	,	not null
    	,		nascimento	--Date			,	not null
    	from    inserted
    end;
    

    Os nomes que eu dei para as colunas são exemplos. Eu só quis enfatizar que o campo Timestamp não pode fazer parte da lista para insert de valores. O valor do campo Timestamp é calculado automaticamente.

    Abraço

    Antonio Cesar

    quarta-feira, 28 de outubro de 2015 02:29
  • Bom dia,

    Trinit, se o seu objetivo é armazenar data e hora acredito que seja o caso de alterar o tipo de dados da coluna para Datetime2 ou outro semelhante, já que o tipo Timestamp do SQL Server não deve ser utilizado para essa finalidade:

    https://technet.microsoft.com/en-us/library/ms182776(v=sql.110).aspx

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 28 de outubro de 2015 11:21