CREATE procedure [dbo].[sp_tcc_key]
@tbl_out nvarchar(255), -- название выходящей таблицы
@fio_flag bit = 0 -- 0: ФИО находятся в поле fio; 1: ФИО отдельно:
-- фамилия в поле f, имя в i, отчество в o
--with encryption
as
set nocount on
If Object_Id(N'[tempdb]..[#tcc]') is Not Null drop table #tcc
CREATE TABLE #tcc(
[id] [int] NOT NULL,
[partid] [int] NULL,
[fio] [varchar](254) NOT NULL,
[addr] [varchar](254) NOT NULL,
[f] [varchar](254) NULL,
[i] [varchar](254) NULL,
[o] [varchar](254) NULL,
[ZIP] [char](6) NULL,
[rowid] [uniqueidentifier] NOT NULL,
[ka] [char](10) NULL,
[kf] [char](10) NULL,
[ki] [char](6) NULL,
[ko] [char](1) NULL,
[kp] [char](3) NULL,
[KEY] [char](30) NULL,
[HASHFAM] [char](32) NULL,
[HASHIM] [char](32) NULL,
[HASHOTCH] [char](32) NULL,
[zaddr] [varchar](254) NULL,
[zfio] [varchar](254) NULL,
CONSTRAINT [PK_tcc_tmp] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
insert #tcc (id,partid,fio,addr,f,i,o,ZIP,rowid)
select id,partid,fio,addr,f,i,o,ZIP,rowid from tcc;
--/*
update #tcc set zaddr = ltrim(rtrim(addr))
update #tcc set zaddr = dbo.fn_replace_notdigits(zaddr)
while exists(select 1 from #tcc where CHARINDEX('--',zaddr)>0) begin
update #tcc set zaddr = REPLACE(zaddr,'--','-') where CHARINDEX('--',zaddr)>0
end;
update #tcc set zaddr = LEFT(zaddr,LEN(zaddr)-1) where RIGHT(zaddr,1)='-'
update #tcc set zaddr = RIGHT(zaddr,LEN(zaddr)-1) where LEFT(zaddr,1)='-'
update #tcc set ka=left(zaddr,10), kp=left(ZIP,3)
--*/
--/*
if @fio_flag = 1 begin
update #tcc set zfio = ltrim(rtrim(ISNULL(f,''))) + ' ' + ltrim(rtrim(ISNULL(i,''))) + ' ' + ltrim(rtrim(ISNULL(o,'')))
end else begin
update #tcc set zfio = ltrim(rtrim(fio))
end;
while exists(select 1 from #tcc where CHARINDEX(' ',zfio)>0) begin
update #tcc set zfio = REPLACE(zfio,' ',' ') where CHARINDEX(' ',zfio)>0
end;
delete from #tcc where PATINDEX('%[^А-Я -]%',zfio)>0
delete from #tcc where PATINDEX('% [БВГДЖЗЙКЛМНПРСТФХЦЧШЩЪЬ] %',zfio)>0
delete from #tcc where PATINDEX('[БВГДЖЗЙКЛМНПРСТФХЦЧШЩЪЬ] %',zfio)>0
delete from #tcc where PATINDEX('[АЕЁИОУЫЭЮЯ] %',zfio)>0 and ASCII(SUBSTRING(fio,PATINDEX('[АЕЁИОУЫЭЮЯ] %',zfio)+2,1)) not between ASCII('А') and ASCII('Я')
delete from #tcc where PATINDEX('% [АЕЁИОУЫЭЮЯ] %',zfio)>0 and ASCII(SUBSTRING(fio,PATINDEX('% [АЕЁИОУЫЭЮЯ] %',zfio)+3,1)) not between ASCII('А') and ASCII('Я')
update #tcc set zfio = UPPER(replace(zfio,'Ё','Е'))
update #tcc set zfio = REPLACE(zfio,' - ','-') where CHARINDEX(' - ',zfio)>0
update #tcc set zfio = REPLACE(zfio,'- ','-') where CHARINDEX('- ',zfio)>0
update #tcc set zfio = REPLACE(zfio,' -','-') where CHARINDEX(' -',zfio)>0
update #tcc set f='',i='',o=''
update #tcc set f=zfio, zfio='' where CHARINDEX(' ',zfio)=0
update #tcc set zfio = RIGHT(zfio,len(zfio) - CHARINDEX(' ',zfio)), f = LEFT(zfio, CHARINDEX(' ',zfio)-1) where CHARINDEX(' ',zfio)>0
update #tcc set i=zfio, zfio='' where CHARINDEX(' ',zfio)=0
update #tcc set zfio = RIGHT(zfio,len(zfio) - CHARINDEX(' ',zfio)), i = LEFT(zfio, CHARINDEX(' ',zfio)-1) where CHARINDEX(' ',zfio)>0
update #tcc set o = zfio
--*/
--/*
update #tcc set
kf=LEFT(f,10),
ki=LEFT(i,6),
ko=LEFT(o,1);
update #tcc set
HASHFAM=right(master.dbo.fn_varbintohexstr(HASHBYTES('md5',f)),32),
HASHIM=right(master.dbo.fn_varbintohexstr(HASHBYTES('md5',i)),32),
HASHOTCH=right(master.dbo.fn_varbintohexstr(HASHBYTES('md5',o)),32);
--*/
--/*
update #tcc set
[KEY] = kp + kf + ka + ki + ko;
--*/
exec('select id,partid,fio,addr,f,i,o,ZIP,rowid, [KEY], HASHFAM, HASHIM, HASHOTCH into ' + @tbl_out + ' from #tcc');
drop table #tcc;
|