IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].[mps_save_fieldsinfo_byid]') AND type = 'P')
DROP PROCEDURE [dbo].[mps_save_fieldsinfo_byid]
GO

CREATE procedure [dbo].[mps_save_fieldsinfo_byid] 
@fldid int,
@fldi_fieldcaption nvarchar(100) ,
@fldi_datatype varchar(20) ,
@fldi_size int ,
@fldi_decimal int ,
@fldi_default nvarchar(100) 
as
begin

declare @fldid2 int 
declare @cmpid int  
declare @tbtype varchar(10)  
declare @objid int  
declare @objid2 int 
declare @fldname varchar(50) 

if (@fldi_datatype='string') set @fldi_datatype='nvarchar' 

select top 1 @cmpid=fldi_cmpid, @tbtype=fldi_tbtype,@objid=fldi_tbid,@objid2=fldi_ord2tag , @fldname=fldi_fieldname  from mps_fieldinfo where fldi_id=@fldid 

select top 1 @fldid2 = fldi_id from mps_fieldinfo_operation where fldi_cmpid=@cmpid and fldi_tbtype=@tbtype and fldi_tbid=@objid and fldi_ord2tag=@objid2 and fldi_fieldname=@fldname  
set @fldid2 = isnull(@fldid2,0) 
if (@fldid2=0)
begin
   if (not exists (select * from mps_fieldinfo where fldi_cmpid=@cmpid and fldi_tbtype=@tbtype and fldi_tbid=@objid and fldi_ord2tag=@objid2 and fldi_fieldname=@fldname))
   begin
insert into mps_fieldinfo_operation(fldi_cmpid,fldi_tbtype,fldi_tbid,fldi_ord2tag,fldi_fieldname,fldi_datatype,fldi_size,fldi_decimal,fldi_default,
fldi_fieldname_old,fldi_datatype_old,fldi_size_old,fldi_decimal_old,fldi_default_old) 
select @cmpid , @tbtype , @objid , @objid2 ,
@fldname , @fldi_datatype,
@fldi_size ,@fldi_decimal , 
@fldi_default ,'','',0,0,'' 
end else 
begin
insert into mps_fieldinfo_operation(fldi_cmpid,fldi_tbtype,fldi_tbid,fldi_ord2tag,fldi_fieldname,fldi_datatype,fldi_size,fldi_decimal,fldi_default,
fldi_fieldname_old,fldi_datatype_old,fldi_size_old,fldi_decimal_old,fldi_default_old) 
select @cmpid , @tbtype , @objid , @objid2 ,
@fldname , @fldi_datatype,
@fldi_size , @fldi_decimal ,
@fldi_default ,
fldi_fieldname,fldi_datatype,fldi_size,fldi_decimal,fldi_default 
from mps_fieldinfo where fldi_id=@fldid 
end 
end else 
begin
update mps_fieldinfo_operation set 
fldi_size = case when @fldi_size=-999999999 then fldi_size else @fldi_size end,
fldi_decimal = case when @fldi_decimal=-999999999   then fldi_decimal else @fldi_decimal end  , 
fldi_default = case when @fldi_default='_none_'  then fldi_default else @fldi_default end,
fldi_datatype = case when @fldi_datatype='_none_' then fldi_datatype else @fldi_datatype end  
where fldi_id=@fldid2  
end 

begin
update mps_fieldinfo set 
fldi_fieldcaption = case when @fldi_fieldcaption='_none_'  then fldi_fieldcaption else @fldi_fieldcaption end,
fldi_size =   case when @fldi_size=-999999999  then fldi_size else @fldi_size end,
fldi_decimal = case when @fldi_decimal=-999999999  then fldi_decimal else @fldi_decimal end, 
fldi_default = case when @fldi_default='_none_'  then fldi_default else @fldi_default end  ,
fldi_datatype = case when @fldi_datatype='_none_' then fldi_datatype else @fldi_datatype end   ,
fldi_changed = 0 
where fldi_id=@fldid  and 
  (
   (@fldi_size<>-999999999 and fldi_size<>@fldi_size) or 
   (@fldi_decimal<>-999999999 and fldi_decimal<>@fldi_decimal) or 
   (@fldi_default<>'_none_' and fldi_default<>@fldi_default) or 
   (@fldi_datatype<>'_none_' and fldi_datatype<>@fldi_datatype)   
  )
end 
end