IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].[mps_fixed_table_info]') AND type = 'P')
DROP PROCEDURE [dbo].[mps_fixed_table_info]
GO
CREATE procedure [dbo].[mps_fixed_table_info](
@cmpid int   
)
as
begin
 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- 纠正biz  
-- 纠正存在的字段，并且类型和SIZE不一致的
update t set 
fldi_datatype = a.fldi_datatype ,
fldi_size = a.fldi_size ,
fldi_decimal = a.fldi_decimal ,
fldi_ident = a.fldi_ident,
fldi_index = a.fldi_index,
fldi_key = a.fldi_key ,
fldi_changed = 0 
from ebs_kernel.dbo.pub_fieldinfo_standard a , mps_fieldinfo t 
where t.fldi_cmpid=@cmpid and t.fldi_tbtype='biz' and 
  t.fldi_ord2tag = case when a.fldi_ord2tag=1 then 0 when a.fldi_ord2tag=0 then t.fldi_ord2tag else a.fldi_ord2tag end and 
  t.fldi_fieldname = a.fldi_fieldname and 
  (t.fldi_size <> a.fldi_size or t.fldi_decimal<>a.fldi_decimal or t.fldi_ident <> a.fldi_ident or t.fldi_index <> a.fldi_index or t.fldi_key <> a.fldi_key) 
-- 纠正 标准中存在，实际表中不存在的字段
insert into mps_fieldinfo(fldi_cmpid,fldi_tbtype,fldi_tbid,fldi_ord2tag,fldi_database,fldi_tbname,fldi_fieldname,fldi_fieldcaption,
fldi_system,fldi_datatype,fldi_ident,fldi_size,fldi_decimal,fldi_default,fldi_hidden,fldi_key,fldi_index,
fldi_updated,fldi_changed)
select 
  @cmpid,fldi_tbtype,biz_id,
case when fldi_ord2tag=1 then 0 when fldi_ord2tag<0 then fldi_ord2tag else 0 end , biz_database,
case when biz_database>'' then biz_database+'.dbo.' else '' end + 'order_'+
case when biz_table=0 then CONVERT(varchar(10),biz_id) else CONVERT(varchar(10),biz_table) end+
case when fldi_ord2tag=1 then '' else '_'+fldi_tbname end ,
fldi_fieldname,fldi_fieldcaption,fldi_system,fldi_datatype,fldi_ident,fldi_size,fldi_decimal,fldi_default,
fldi_hidden,fldi_key,fldi_index,0,0 
from ebs_kernel.dbo.pub_fieldinfo_standard a , mps_biztype 
where biz_cmpid=@cmpid and a.fldi_tbtype='biz' and (a.fldi_ord2tag=1 or a.fldi_ord2tag<0)   
and 
( not exists (
select 1 from mps_fieldinfo b where b.fldi_cmpid=@cmpid and b.fldi_tbtype='biz' and 
b.fldi_tbid=biz_id and (b.fldi_ord2tag=0 or b.fldi_ord2tag<0) and b.fldi_fieldname=a.fldi_fieldname and case when a.fldi_ord2tag=1 then 0 else a.fldi_ord2tag end=b.fldi_ord2tag 
))

insert into mps_fieldinfo(fldi_cmpid,fldi_tbtype,fldi_tbid,fldi_ord2tag,fldi_database,fldi_tbname,fldi_fieldname,fldi_fieldcaption,
fldi_system,fldi_datatype,fldi_ident,fldi_size,fldi_decimal,fldi_default,fldi_hidden,fldi_key,fldi_index,
fldi_updated,fldi_changed)
select 
  @cmpid,fldi_tbtype,biz_id,
biz2_tag , biz_database,
case when biz_database>'' then biz_database+'.dbo.' else '' end + 'order_'+
case when biz_table=0 then CONVERT(varchar(10),biz_id) else CONVERT(varchar(10),biz_table) end+
'_'+CONVERT(varchar(10),biz2_tag) ,
fldi_fieldname,fldi_fieldcaption,fldi_system,fldi_datatype,fldi_ident,fldi_size,fldi_decimal,fldi_default,
fldi_hidden,fldi_key,fldi_index,0,0 
from ebs_kernel.dbo.pub_fieldinfo_standard a , mps_biztype , mps_biztype2 
where biz_cmpid=@cmpid and a.fldi_tbtype='biz' and (a.fldi_ord2tag=0)  and biz2_bizid=biz_id  and biz2_tag>0 
and 
( not exists (
select 1 from mps_fieldinfo b where b.fldi_cmpid=@cmpid and b.fldi_tbtype='biz' and 
b.fldi_ord2tag=biz2_tag and 
b.fldi_tbid=biz_id and (b.fldi_ord2tag>0) and b.fldi_fieldname=a.fldi_fieldname
))
end