Ngarkimi i FIAS në DB në MSSQLSERVER me mjete të rastit (SQLXMLBULKLOAD). Si nuk duhet (ndoshta) ta bësh këtë

Epigrafi:
«Kur në krahët e tu ka një çekiç, gjithçka përreth duket si thumba».

Ngarkimi i FIAS në DB në MSSQLSERVER me mjete të rastit (SQLXMLBULKLOAD). Si nuk duhet (ndoshta) ta bësh këtë
Një herë e një kohë, duket se – të premten e kaluar, ndërsa po shëtisja në rrethinat e zyrës, drejtuesit e dëshpëruar u shqetësuan që po kaloja kohën në kotësi dhe duke vështuar macet.

— Po të ngarkojmë FIAS, shoku im! – tha drejtuesi. – Sepse procesi i ngarkimit të tij duket se nuk i pëlqen njësive tona të biznesit. Po thonë se ngarkohet ngadalë, ngarkohet nga serveri i produkteve dhe tipi që shkroi procesin e ngarkimit, pak më parë u largua, që është si tre vite tani.
Për më tepër, gjithçka atje ka nevojë për rregullime, prandaj ti merr, krijo një bazë për veten dhe siguro periudhën e ngarkimit të FIAS-it. E gjithë kjo, siç thuhet, nuk të pengoj!

Këtu duhet thënë se nuk kam shumë lidhje me programimin, sepse jam më shumë DBA. Megjithatë, nga ana tjetër, ngarkimi i grupeve të mëdha të informacionit të përgatitur paraprakisht është pikërisht një detyrë e DBA, apo jo?

— Po eja… Tani do ta bëjmë – i thashë drejtuesit dhe u nisa për në faqen e FIAS-it, duke ngritur mëngët.

«O! Këtu ka dbf!» — mendova, duke fshirë duar, në të njëjtën kohë duke u habitur me mungesën e arkivit standard «de-fakto» zip, dhe, përkundrazi, me praninë e vdekurit në botë arj dhe pronarit, e sigurisht, 7zip [por që gjithsesi nuk mund të nxirret me powershell Expand-Archive]. Pra, me powershell të pastër nuk do ta shkarkosh dhe as ta nxjerrësh. Do të duhet të dërgosh në server çdo lloj coji. Por le të jetë.

Unë kam shkruar mjetin për ngarkimin masiv paralel të skedarëve dbf prej disa vitesh, për rreth 3 vjet, kështu që nuk duhet të ketë probleme.

E nxora skedarët dbf, aktivizova programin e ngarkimit, dhe ndërsa të dhënat po ngarkoheshin, përgatita një skript që kombinonte tabela të veçanta "gati me emra të njëjtë" në një, sipas përkatësisë.

Ngarkova të dhënat, dhe isha gati të shkoja në zyrën e menaxhmentit për t'i dhënë, thjesht, lavd të merituar, por një djall më bëri të shikoj rezultatet e importit!

Ngarkimi i FIAS në DB në MSSQLSERVER me mjete të rastit (SQLXMLBULKLOAD). Si nuk duhet (ndoshta) ta bësh këtë

— Ups. WTF!!!???

Ngarkimi i FIAS në DB në MSSQLSERVER me mjete të rastit (SQLXMLBULKLOAD). Si nuk duhet (ndoshta) ta bësh këtë

Tabelat e mëdha ngarkoheshin normalisht, ndërsa të voglat – kishin krakozabrat.

Dhe kështu, nga gjithë kjo më erdhi keq dhe mërzi, sa që me guxim mora veten në dorë dhe fillova të merrem me prokrastinimin dhe detyrat e mia të drejtpërdrejta. Nuk doja të merresha me dbf-të e prishura.

Prokrastinova ditë dy, derisa aplikimet mbaruan, dhe në horizont doli përsëri drejtori me pyetjen e zakonshme "Çfarë po bëjmë ne këtu?".

Dhe, pasi nuk kishte përgjigje, dhe nuk dëshiroja të merresha me dbf – vendosa të ngarkoja FIAS nga xml, sidomos që, siç thonë, është stil, modern, dhe "dbf – një format në vdekje".
Me këtë, lejoni të përfundoj monologun e zgjatur hyrës dhe të kaloj në çështje.

Epigrafi 2:
Po, kështu mund të bëhet gjithashtu. 🙂

Pra, u vendos që të ngarkohet me SQLXMLBULKLOAD – një bibliotekë e shkëlqyer, e cila është ndërtuar pikërisht për ngarkimin e masiv (bulk) të skedareve xml të strukturuara.
Për ta përdorur, duhet shkarkoni dhe të instaloni bibliotekën SqlXml 4.0 Service Pack 1 (SP1).

Megjithatë, në rastin e FIAS, "strukturimi" nuk është shumë i nevojshëm. Sepse skedarët aty nuk janë vetëm se nuk janë xml... ata, sigurisht, janë xml, por, në thelb – janë tabela të sheshta me të dhëna, në çdo skedar – një tabelë.

Në faqen sql.ru kam gjeta procedurën spXMLBulkLoad të respektuarit përdorues Mnior, për të mos dalë fare jashtë kufijve të SQL serverit, dhe as të shkruaj thirrjen SQLXMLBULKLOAD në CLR.

Ja një version i modifikuar i saj:

spXMLBulkLoad

PËRDOR [FIAS2]
SHKO

/****** Objekti:  Procedura e Ruajtjes [dbo].[spXMLBulkLoad]    Data e Skemës: 13.05.2019 18:05:58 ******/
SIL ANSI_NULLS ON
SHKO

SIL QUOTED_IDENTIFIER ON
SHKO


-- Duhet të lejohet Procedurat për Automatizimin Ole:
	-- EXEC sp_configure 'Ole Automation Procedures', 1; RIKONFIGURO ME OVERRIDE;

-- Shembulli:
	-- EXEC dbo.spXMLBulkLoad 'Z:PathData.xml','Z:PathSchema.xsd', 'FIAS', 'Z:Patherror.xml'

KRIJO PROCEDURË [dbo].[spXMLBulkLoad] (
	 @File		SysName
	,@Schema	SysName
	,@DataBase	SysName	= ''
	,@ErrorLog	SysName
) SI 
FILLIM 
	SHËNO	 @ErrCode	Int
		,@OLEXMLBulk	Int
		,@ErrMethod		SysName
		,@ErrDescript	NVarChar(4000)
	
	EXEC @ErrCode = sys.sp_OACreate 'SQLXMLBulkLoad.SQLXMLBulkload', @OLEXMLBulk OUT
	NËSE (@ErrCode = 0) 
	FILLIM
		SHËNO	@DataBase	= 'Provider=SQLOLEDB;Data Source=.;DataBase=' + @DataBase + ';Siguria e Integruar=SSPI'
		EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk ,'ConnectionString', @DataBase		
			NËSE (@ErrCode  0) 
				FILLIM SHËNO @ErrMethod = 'ConnectionString'	
					  GOTO Gabim 
				FUND
		EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk ,'ErrorLogFile', @ErrorLog		
			NËSE (@ErrCode  0) 
				FILLIM SHËNO @ErrMethod = 'ErrorLogFile'	
					  GOTO Gabim 
				FUND

		EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk, 'CheckConstraints', 1			
			NËSE (@ErrCode  0) 
				FILLIM SHËNO @ErrMethod = 'CheckConstraints'	
					  GOTO Gabim 
				FUND

		--EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk, 'ForceTableLock', 1			
		--	NËSE (@ErrCode  0) 
		--		FILLIM SHËNO @ErrMethod = 'ForceTableLock'	
		--			  GOTO Gabim 
		--		FUND
		
		EXEC @ErrCode = sys.sp_OAMethod	@OLEXMLBulk, 'Execute', NULL, @Schema, @File
		NËSE (@ErrCode  0) 
		FILLIM
			SHËNO @ErrMethod = 'Execute'
			SHËNO	 @Exist	Int
					,@Error	XML
				    ,@SQL	NvarChar(max)
			EXEC master.dbo.xp_FileExist @ErrorLog, @Exist OUT
			NËSE (@Exist = 1) 
			FILLIM
				 -- Nga skedari @ErrorLog
				Set @SQL = N'SELECT  @Error = E.Error + CASE WHEN Right(E.Error,1)  ''>'' THEN ''lt>'' ELSE '''' END '
						   + N'FROM OPENROWSET(BULK '''+ @ErrorLog +''', SINGLE_NCLOB) E(Error)'
				exec sp_executesql @SQL, N'@Error xml OUTPUT', @Error=@Error OUTPUT 
				
				SELECT	@ErrDescript	= IsNull(@ErrDescript,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('Result/Error')E(Error)
				SELECT	@ErrDescript	= IsNull(@ErrDescript,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('Error/Record')E(Error)
			FUND 
			ELSE
				GOTO Gabim
		FUND
		GOTO Shkatërrimi
	Gabim:	
			EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEXMLBulk, @ErrorLog OUT, @ErrDescript OUT
	Shkatërrimi:
			EXEC @ErrCode = sys.sp_OADestroy @OLEXMLBulk
	FUND 
	ELSE
		SELECT	 
			 @ErrMethod	= 'SQLXMLBulkLoad.SQLXMLBulkload'
			,@ErrorLog	= 'sp_OACreate'
			,@ErrDescript	= 'Gabim në krijimin e objektit OLE'
	
	-- Shfaqja e gabimeve
	NËSE (@ErrMethod IS NOT NULL) 
	FILLIM
		RAISEERROR('Gabim gjatë ekzekutimit të metodës "%s" në "%s": %s',18,1, @ErrMethod, @ErrorLog, @ErrDescript)
		KTHIM	@@Error
	FUND
FUND
SHKO

Megjithatë, për të realizuar ngarkimin masiv të xml duke përdorur këtë bibliotekë, janë të nevojshme skemat e xsd të annotuara, në të cilat, në thelb, tregojnë se si dhe ku ngarkohet gjithçka.

Përmendjet se këto skema ekzistojnë, "por vetëm ato të vjetra" — i kam gjetur në 10 faqe, por askund nuk kam gjetur vetë skemat. Dhe u shqetësova.

Modifikimi i skemës ekzistuese në faqen e FIAS për importimin e të dhënave manualisht – nuk është e vështirë.
Por… në përmbledhje – aty janë 271 fusha! Sa shumë do të duhej të rrihemi dhe të mendojmë!

Prandaj, vendosa të modifikoj këto skema automatikisht, duke krijuar gjithashtu tabela të destinuara në DB.

SQLXMLBULKLOAD mund të krijojë automatikisht tabela për të dhënat që ngarkohen nga skema e annotuar, por, ana tjetër, nëse unë do ta krijoj këtë skemë, pse mos ta bëj vetë këto tabela, ashtu siç më nevojitet?

Kam shkarkuar skemat xsd nga faqja e FIAS dhe i kam analizuar ato thjesht vizualisht.

Fatmirësisht, ato janë të njëjta, kështu që krijimi i DB-së së destinuar dhe modifikimi i vetë skemave për ngarkim mund të bëhet me vetëm disa kërkesa jo shumë të komplikuara.

1. Të krijojmë një bazë të zbrazët FIAS2.
Pse "2"? Epo, sepse "1" ishte baza nga dbf-të. Mund ta diskutojmë atë më vonë.

Skedari i krijimit të DB-së FIAS2

CREATE DATABASE [FIAS2]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'FIAS', FILENAME = N'E:DataFIAS1.mdf' , SIZE = 10485760KB , FILEGROWTH = 1048576KB )
 LOG ON 
( NAME = N'FIAS_log', FILENAME = N'E:DataFIAS1_log.ldf' , SIZE = 1048576KB , FILEGROWTH = 131072KB )
GO
ALTER DATABASE [FIAS2] SET COMPATIBILITY_LEVEL = 120
GO
ALTER DATABASE [FIAS2] SET ANSI_NULL_DEFAULT ON 
GO
ALTER DATABASE [FIAS2] SET ANSI_NULLS ON 
GO
ALTER DATABASE [FIAS2] SET ANSI_PADDING ON 
GO
ALTER DATABASE [FIAS2] SET ANSI_WARNINGS ON 
GO
ALTER DATABASE [FIAS2] SET ARITHABORT OFF 
GO
ALTER DATABASE [FIAS2] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [FIAS2] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [FIAS2] SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF)
GO
ALTER DATABASE [FIAS2] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [FIAS2] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [FIAS2] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [FIAS2] SET CONCAT_NULL_YIELDS_NULL ON 
GO
ALTER DATABASE [FIAS2] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [FIAS2] SET QUOTED_IDENTIFIER ON 
GO
ALTER DATABASE [FIAS2] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [FIAS2] SET  DISABLE_BROKER 
GO
ALTER DATABASE [FIAS2] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [FIAS2] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [FIAS2] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [FIAS2] SET READ_COMMITTED_SNAPSHOT ON 
GO
ALTER DATABASE [FIAS2] SET  READ_WRITE 
GO
ALTER DATABASE [FIAS2] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [FIAS2] SET  MULTI_USER 
GO
ALTER DATABASE [FIAS2] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [FIAS2] SET TARGET_RECOVERY_TIME = 0 SECONDS 
GO
ALTER DATABASE [FIAS2] SET DELAYED_DURABILITY = DISABLED 
GO
USE [FIAS2]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [FIAS2] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO

2. Të krijojmë në këtë bazë disa tabela.

Tabela e parë do të përmbajë skemat xsd, ndërsa tabela e dytë do të përfaqësojë në fakt skemën e të dhënave, e cila është marrë nga këto skema xsd.

Skemat xsd janë në thelb skedare xml të zakonshme, prandaj mund të punoni me to si me çdo xml tjetër.

PËRDORNI [FIAS2]
shkoni

nëse OBJECT_ID('dbo.[_FIAS]') nuk është null 
	dhjeni tavolinën dbo.[_FIAS]
shkoni

nëse OBJECT_ID('dbo._FIAS_SCHEMAS') nuk është null 
	dhjeni tavolinën dbo.[_FIAS_SCHEMAS]
shkoni

Krijoni tavolinën dbo.[_FIAS_SCHEMAS] (x xml, [table “” not found \/]
sysname) shkoni -- Kërkesa e parë: Ngarkohet skemat në tavolinën në server, për manipulime të mëtejshme. insert into dbo.[_FIAS_SCHEMAS] (x, [table “” not found \/]
) Zgjidhni x = CAST(BulkColumn AS XML).query('.'), '_ACTSTAT' [table “” not found \/]
FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ACTSTAT_2_250_08_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ADDROBJ' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ADDROBJ_2_250_01_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_CENTERST' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_CENTERST_2_250_10_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_CURENTST' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_CURENTST_2_250_07_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_ADDROBJ' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_ADDROBJ_2_250_15_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_HOUSEINT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_HOUSEINT_2_250_17_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_HOUSE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_HOUSE_2_250_16_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_LANDMARK' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_LANDMARK_2_250_18_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_NORMDOC' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_NORMDOC_2_250_19_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ESTSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ESTSTAT_2_250_13_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_FLATTYPE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_FLATTYPE_2_250_23_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_HOUSEINT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_HOUSEINT_2_250_03_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_HOUSE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_HOUSE_2_250_02_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_HSTSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_HSTSTAT_2_250_12_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_INTVSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_INTVSTAT_2_250_11_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_LANDMARK' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_LANDMARK_2_250_04_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_NDOCTYPE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_NDOCTYPE_2_250_20_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_NORMDOC' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_NORMDOC_2_250_05_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_OPERSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_OPERSTAT_2_250_09_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ROOMTYPE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ROOMTYPE_2_250_24_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ROOM' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ROOM_2_250_21_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_SOCRBASE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_SOCRBASE_2_250_06_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_STEAD' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_STEAD_2_250_22_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_STRSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_STRSTAT_2_250_14_04_01_01.xsd', SINGLE_BLOB) x -- Kërkesa e dytë: Shkallëzojmë skemat dhe krijojmë një tabelë pune me metadata ;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xs) Select a.[table “” not found /]
,tbl.[root_name] ,tbl.[root_description] ,tbl.[name] ,ROW_NUMBER() over (partition by a.[table “” not found \/]
order by 1\/0) N ,tbl.[column] ,tbl.[required] ,tbl.[description] ,tbl.[type] ,tbl.[len] ,Case tbl.[type] when N'byte' then N'tinyint' when N'date' then N'date' when N'int' then N'int' when N'string' then Case when tbl.[len] = 36 and (tbl.[column] like N'%ID' or tbl.[column] = N'NORMDOC') then N'uniqueidentifier' when tbl.[len] is Null then N'nvarchar(max)' Else N'nvarchar(' + cast(tbl.[len] as nvarchar(4000)) + N')' END when N'integer' then Case when tbl.[len] > 9 then N'bigint' when tbl.[len] <= 4 then N'smallint' Else N'int' end else N'nvarchar(max)' End [sqltype] ,t.n.query('.') [node] into dbo.[_FIAS] from dbo.[_FIAS_SCHEMAS] a Cross apply a.x.nodes('\\xs:attribute') t(n) Cross apply (values -- disa disa fusha janë përdorur disa herë, prandaj do ta bëjmë kështu :) ( x.value('(xs:schema[1]\/xs:element[1]\/@name)', 'nvarchar(255)') ,x.value('(xs:schema[1]\/xs:element[1]\/xs:annotation\/xs:documentation[1]\/text())[1]', 'nvarchar(4000)') ,x.value('(xs:schema[1]\/xs:element[1]\/xs:complexType[1]\/xs:sequence[1]\/xs:element[1]\/@name)', 'nvarchar(255)') ,t.n.value('(.\/@name)[1]', 'nvarchar(255)') ,t.n.value('(.\/@use)[1]', 'nvarchar(255)') ,Stuff(Coalesce(t.n.value('(.\/xs:simpleType\/xs:restriction\/@base)[1]', 'nvarchar(255)'), t.n.value('(.\/@type)[1]', 'nvarchar(255)')), 1, 3, '') ,Coalesce(t.n.value('(.\/xs:simpleType\/xs:restriction\/xs:length\/@value)[1]', 'int') ,t.n.value('(.\/xs:simpleType\/xs:restriction\/xs:maxLength\/@value)[1]', 'int') ,t.n.value('(.\/xs:simpleType\/xs:restriction\/xs:totalDigits\/@value)[1]', 'int')) ,Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace(t.n.value('(.\/xs:annotation\/xs:documentation)[1]', 'nvarchar(4000)'), ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') ) ) tbl([root_name], [root_description], [name], [column], [required], [type], [len], [description]) -- Do të shohim rezultatet Select * from dbo.[_FIAS]

Më shumë për kërkesat:

E para – ngarkon skemat xsd në tabelën në server, duke i pajisur çdo skemë me një annotim në fushën [table "" not found /]
– emri i tabelës, në të cilën deshiroj të ngarkoj të dhënat nga tabela përkatëse.

Sigurisht, do të ishte e mundur të bëhej që sa herë që skemat ndryshojnë, ato mund të shkarkoheshin, të vendoseshin në ndonjë dosje dhe të rikonstruktohej struktura e tabelave celulare automatikisht, dhe automatikisht të modifikoheshin skemat, por pasi struktura ndryshon jashtëzakonisht rrallë, hera e fundit ishte në vitin 2016 - krijimi i një automati të tillë është mjaft për të qenë dembel. Më mirë të investosh 30 sekonda në CTRL+C – CTRL+V.

Prandaj ngarkimi në tabelën me skemat është i koduar ashpër, dhe rrugët e skedarëve që ngarkohen, si dhe emrat e tabelave – janë shkruar me dorë.

Kërkesa e dytë – nxjerr informacionin nga skemat për strukturën e tabelave. Nuk kam dashur të merrem me 3NF, por e kam zgjeruar si një tabelë.

Kujdes, meqë ra fjala, shikoni këtë copë (+)

Shpesh, fillestarët bëjnë pyetje: a është e mundur të llogaritet një shprehje e komplikuar në kërkesë një herë, dhe pastaj të përdoret shumë herë në disa vende. Po, është e mundur. Ja si, për shembull:

from dbo.[_FIAS_SCHEMAS] a
	Cross apply a.x.nodes('\/\/xs:attribute') t(n)
	Cross apply 
			(values -- disa fusha përdoren disa herë, prandaj do ta bëjmë kështu :) 
			(
			 x.value('(xs:schema[1]\/xs:element[1]\/@name)', 'nvarchar(255)')
, ... këtu mund të enumeroni të gjitha fushat e komplikuara për t'u llogaritur, për t'i përdorur më pas në çdo pjesë të kërkesës
			)
			) tbl([root_name], [root_description], [name], [column], [required], [type], [len], [description])

Funksionon me disa kufizime, sigurisht. Por, pasi të filloni ta përdorni, do të kuptoni shpejt në çfarë qëndrojnë ato.

3. Do të krijojmë skriptet që krijojnë tabelat FIAS, dhe pastaj do t'i ekzekutojmë, dhe do të krijojmë vetë tabelat:


Deklaro @schema sysname = N'dbo'
Deklaro @sql nvarchar(max)

-- Të krijojmë kodin për krijimin e tabelave dhe ta ekzekutojmë atë
set @sql = (
	Select Distinct 
		N';Krijo tabelën ' 
		+ Quotename(@schema)
		+ N'.'
		+ Quotename([table “” not found \/]
) + N'(' + Stuff((Select N',' + QUOTENAME(b.[column]) + N' ' + b.[sqltype] + Case b.[required] when 'required' then N' NOT NULL' when 'optional' then N' NULL' End From dbo.[_FIAS] b where b.[table “” not found \/]
= a.[table “” not found \/]
Order by N ASC Për xml path(N''), tip ).vlera(N'.', 'nvarchar(max)'), 1, 1, N'') + N')' from dbo.[_FIAS] a Për xml path(N''), tip).vlera(N'.', N'nvarchar(max)') exec (@sql)

Kush është dembel për të kaluar nëpër këtë proces – skriptet për krijimin e tabelave dhe skemat e anotuar FIAS do të jenë të bashkangjitura në fund të artikullit.

Kërkesa për krijimin e tabelave, e cila rezultoi nga puna e kërkesës

;

CREATE TABLE [dbo].[_ACTSTAT] (
	[NAME] NVARCHAR(100) NOT NULL
	,[ACTSTATID] BIGINT NOT NULL
	);

CREATE TABLE [dbo].[_ADDROBJ] (
	[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[FORMALNAME] NVARCHAR(120) NOT NULL
	,[REGIONCODE] NVARCHAR(2) NOT NULL
	,[AUTOCODE] NVARCHAR(1) NOT NULL
	,[AREACODE] NVARCHAR(3) NOT NULL
	,[CITYCODE] NVARCHAR(3) NOT NULL
	,[CTARCODE] NVARCHAR(3) NOT NULL
	,[PLACECODE] NVARCHAR(3) NOT NULL
	,[PLANCODE] NVARCHAR(4) NOT NULL
	,[STREETCODE] NVARCHAR(4) NULL
	,[EXTRCODE] NVARCHAR(4) NOT NULL
	,[SEXTCODE] NVARCHAR(3) NOT NULL
	,[OFFNAME] NVARCHAR(120) NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[SHORTNAME] NVARCHAR(10) NOT NULL
	,[AOLEVEL] BIGINT NOT NULL
	,[PARENTGUID] UNIQUEIDENTIFIER NULL
	,[AOID] UNIQUEIDENTIFIER NOT NULL
	,[PREVID] UNIQUEIDENTIFIER NULL
	,[NEXTID] UNIQUEIDENTIFIER NULL
	,[CODE] NVARCHAR(17) NULL
	,[PLAINCODE] NVARCHAR(15) NULL
	,[ACTSTATUS] BIGINT NOT NULL
	,[CENTSTATUS] BIGINT NOT NULL
	,[OPERSTATUS] BIGINT NOT NULL
	,[CURRSTATUS] BIGINT NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[LIVESTATUS] TINYINT NOT NULL
	,[DIVTYPE] INT NOT NULL
	,[OKTMO] NVARCHAR(11) NULL
	);

CREATE TABLE [dbo].[_CENTERST] (
	[CENTERSTID] BIGINT NOT NULL
	,[NAME] NVARCHAR(100) NOT NULL
	);

CREATE TABLE [dbo].[_CURENTST] (
	[CURENTSTID] BIGINT NOT NULL
	,[NAME] NVARCHAR(100) NOT NULL
	);

CREATE TABLE [dbo].[_DEL_ADDROBJ] (
	[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[FORMALNAME] NVARCHAR(120) NOT NULL
	,[REGIONCODE] NVARCHAR(2) NOT NULL
	,[AUTOCODE] NVARCHAR(1) NOT NULL
	,[AREACODE] NVARCHAR(3) NOT NULL
	,[CITYCODE] NVARCHAR(3) NOT NULL
	,[CTARCODE] NVARCHAR(3) NOT NULL
	,[PLACECODE] NVARCHAR(3) NOT NULL
	,[STREETCODE] NVARCHAR(4) NULL
	,[EXTRCODE] NVARCHAR(4) NOT NULL
	,[PLANCODE] NVARCHAR(4) NOT NULL
	,[SEXTCODE] NVARCHAR(3) NOT NULL
	,[OFFNAME] NVARCHAR(120) NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[SHORTNAME] NVARCHAR(10) NOT NULL
	,[AOLEVEL] BIGINT NOT NULL
	,[PARENTGUID] UNIQUEIDENTIFIER NULL
	,[AOID] UNIQUEIDENTIFIER NOT NULL
	,[PREVID] UNIQUEIDENTIFIER NULL
	,[NEXTID] UNIQUEIDENTIFIER NULL
	,[CODE] NVARCHAR(17) NULL
	,[PLAINCODE] NVARCHAR(15) NULL
	,[ACTSTATUS] BIGINT NOT NULL
	,[CENTSTATUS] BIGINT NOT NULL
	,[OPERSTATUS] BIGINT NOT NULL
	,[CURRSTATUS] BIGINT NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[LIVESTATUS] TINYINT NOT NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	);

CREATE TABLE [dbo].[_DEL_HOUSE] (
	[POSTALCODE] NVARCHAR(6) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[HOUSENUM] NVARCHAR(20) NULL
	,[ESTSTATUS] SMALLINT NOT NULL
	,[BUILDNUM] NVARCHAR(10) NULL
	,[STRUCNUM] NVARCHAR(10) NULL
	,[STRSTATUS] BIGINT NULL
	,[HOUSEID] UNIQUEIDENTIFIER NOT NULL
	,[HOUSEGUID] UNIQUEIDENTIFIER NOT NULL
	,[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[STATSTATUS] BIGINT NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[COUNTER] BIGINT NOT NULL
	,[CADNUM] NVARCHAR(100) NULL
	,[DIVTYPE] INT NOT NULL
	);

CREATE TABLE [dbo].[_DEL_HOUSEINT] (
	[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[INTSTART] BIGINT NOT NULL
	,[INTEND] BIGINT NOT NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[HOUSEINTID] UNIQUEIDENTIFIER NOT NULL
	,[INTGUID] UNIQUEIDENTIFIER NOT NULL
	,[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[INTSTATUS] BIGINT NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[COUNTER] BIGINT NOT NULL
	);

CREATE TABLE [dbo].[_DEL_LANDMARK] (
	[LOCATION] NVARCHAR(500) NOT NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[LANDID] UNIQUEIDENTIFIER NOT NULL
	,[LANDGUID] UNIQUEIDENTIFIER NOT NULL
	,[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	);

CREATE TABLE [dbo].[_DEL_NORMDOC] (
	[NORMDOCID] UNIQUEIDENTIFIER NOT NULL
	,[DOCNAME] NVARCHAR(max) NULL
	,[DOCDATE] DATE NULL
	,[DOCNUM] NVARCHAR(20) NULL
	,[DOCTYPE] BIGINT NOT NULL
	,[DOCIMGID] UNIQUEIDENTIFIER NULL
	);

CREATE TABLE [dbo].[_ESTSTAT] (
	[ESTSTATID] BIGINT NOT NULL
	,[NAME] NVARCHAR(20) NOT NULL
	,[SHORTNAME] NVARCHAR(20) NULL
	);

CREATE TABLE [dbo].[_FLATTYPE] (
	[SHORTNAME] NVARCHAR(20) NULL
	,[FLTYPEID] BIGINT NOT NULL
	,[NAME] NVARCHAR(20) NOT NULL
	);

CREATE TABLE [dbo].[_HOUSE] (
	[POSTALCODE] NVARCHAR(6) NULL
	,[REGIONCODE] NVARCHAR(2) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[HOUSENUM] NVARCHAR(20) NULL
	,[ESTSTATUS] SMALLINT NOT NULL
	,[BUILDNUM] NVARCHAR(10) NULL
	,[STRUCNUM] NVARCHAR(10) NULL
	,[STRSTATUS] BIGINT NULL
	,[HOUSEID] UNIQUEIDENTIFIER NOT NULL
	,[HOUSEGUID] UNIQUEIDENTIFIER NOT NULL
	,[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[STATSTATUS] BIGINT NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[COUNTER] BIGINT NOT NULL
	,[CADNUM] NVARCHAR(100) NULL
	,[DIVTYPE] INT NOT NULL
	);

CREATE TABLE [dbo].[_HOUSEINT] (
	[OKTMO] NVARCHAR(11) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[ENDDATE] DATE NOT NULL
	,[INTSTATUS] BIGINT NOT NULL
	,[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[INTGUID] UNIQUEIDENTIFIER NOT NULL
	,[HOUSEINTID] UNIQUEIDENTIFIER NOT NULL
	,[INTSTART] BIGINT NOT NULL
	,[INTEND] BIGINT NOT NULL
	,[UPDATEDATE] DATE NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[COUNTER] BIGINT NOT NULL
	);

CREATE TABLE [dbo].[_HSTSTAT] (
	[HOUSESTID] BIGINT NOT NULL
	,[NAME] NVARCHAR(60) NOT NULL
	);

CREATE TABLE [dbo].[_INTVSTAT] (
	[INTVSTATID] BIGINT NOT NULL
	,[NAME] NVARCHAR(60) NOT NULL
	);

CREATE TABLE [dbo].[_LANDMARK] (
	[NORMDOC] UNIQUEIDENTIFIER NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[LANDGUID] UNIQUEIDENTIFIER NOT NULL
	,[AOGUID] UNIQUEIDENTIFIER NOT NULL
	,[LANDID] UNIQUEIDENTIFIER NOT NULL
	,[LOCATION] NVARCHAR(500) NOT NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	);

CREATE TABLE [dbo].[_NDOCTYPE] (
	[NDTYPEID] BIGINT NOT NULL
	,[NAME] NVARCHAR(250) NOT NULL
	);

CREATE TABLE [dbo].[_NORMDOC] (
	[NORMDOCID] UNIQUEIDENTIFIER NOT NULL
	,[DOCNAME] NVARCHAR(max) NULL
	,[DOCDATE] DATE NULL
	,[DOCNUM] NVARCHAR(20) NULL
	,[DOCTYPE] BIGINT NOT NULL
	,[DOCIMGID] UNIQUEIDENTIFIER NULL
	);

CREATE TABLE [dbo].[_OPERSTAT] (
	[OPERSTATID] BIGINT NOT NULL
	,[NAME] NVARCHAR(100) NOT NULL
	);

CREATE TABLE [dbo].[_ROOM] (
	[ROOMGUID] UNIQUEIDENTIFIER NOT NULL
	,[FLATNUMBER] NVARCHAR(50) NOT NULL
	,[FLATTYPE] INT NOT NULL
	,[ROOMNUMBER] NVARCHAR(50) NULL
	,[ROOMTYPE] INT NULL
	,[REGIONCODE] NVARCHAR(2) NOT NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[HOUSEGUID] UNIQUEIDENTIFIER NOT NULL
	,[ROOMID] UNIQUEIDENTIFIER NOT NULL
	,[PREVID] UNIQUEIDENTIFIER NULL
	,[NEXTID] UNIQUEIDENTIFIER NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[LIVESTATUS] TINYINT NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[OPERSTATUS] BIGINT NOT NULL
	,[CADNUM] NVARCHAR(100) NULL
	,[ROOMCADNUM] NVARCHAR(100) NULL
	);

CREATE TABLE [dbo].[_ROOMTYPE] (
	[SHORTNAME] NVARCHAR(20) NULL
	,[NAME] NVARCHAR(20) NOT NULL
	,[RMTYPEID] BIGINT NOT NULL
	);

CREATE TABLE [dbo].[_SOCRBASE] (
	[LEVEL] BIGINT NOT NULL
	,[SCNAME] NVARCHAR(10) NULL
	,[SOCRNAME] NVARCHAR(50) NOT NULL
	,[KOD_T_ST] NVARCHAR(4) NOT NULL
	);

CREATE TABLE [dbo].[_STEAD] (
	[STEADGUID] UNIQUEIDENTIFIER NOT NULL
	,[NUMBER] NVARCHAR(120) NULL
	,[REGIONCODE] NVARCHAR(2) NOT NULL
	,[POSTALCODE] NVARCHAR(6) NULL
	,[IFNSFL] NVARCHAR(4) NULL
	,[TERRIFNSFL] NVARCHAR(4) NULL
	,[IFNSUL] NVARCHAR(4) NULL
	,[TERRIFNSUL] NVARCHAR(4) NULL
	,[OKATO] NVARCHAR(11) NULL
	,[OKTMO] NVARCHAR(11) NULL
	,[UPDATEDATE] DATE NOT NULL
	,[PARENTGUID] UNIQUEIDENTIFIER NULL
	,[STEADID] UNIQUEIDENTIFIER NOT NULL
	,[PREVID] UNIQUEIDENTIFIER NULL
	,[NEXTID] UNIQUEIDENTIFIER NULL
	,[OPERSTATUS] BIGINT NOT NULL
	,[STARTDATE] DATE NOT NULL
	,[ENDDATE] DATE NOT NULL
	,[NORMDOC] UNIQUEIDENTIFIER NULL
	,[LIVESTATUS] TINYINT NOT NULL
	,[CADNUM] NVARCHAR(100) NULL
	,[DIVTYPE] INT NOT NULL
	);

CREATE TABLE [dbo].[_STRSTAT] (
	[NAME] NVARCHAR(20) NOT NULL
	,[SHORTNAME] NVARCHAR(20) NULL
	,[STRSTATID] BIGINT NOT NULL
	)

4. Nëse në xsd ka një përshkrim të qartë të tabelave dhe fushave në to - ta përdorim atë dhe të krijojmë përshkrimin e strukturës në pronësitë e zgjatura të tabelave dhe fushave të tyre:

-- Do të krijojmë një përshkrim për tabelat dhe fushat
Set @sql = (
Select N'; exec sp_addextendedproperty @name=''description'', @value=N'''' 
		+ a.[root_description] 
		+ N''', @level0type =N''Schema'', @level0name = N''' 
		+ @schema 
		+ N''', @level1type = N''Table'',  @level1name = N''' 
		+ a.[table “” not found \/]
+ N'''' from (Select distinct [table “” not found \/]
, [root_description] from dbo.[_FIAS]) a for xml path(N''), type ).value(N'.', N'nvarchar(max)') exec (@sql) Set @sql = ( Select N'; exec sp_addextendedproperty @name=''description'', @value=N'''' + a.[description] + N''', @level0type =N''Schema'', @level0name = N''' + @schema + N''', @level1type = N''Table'', @level1name = N''' + a.[table “” not found \/]
+ N''', @level2type = N''Column'', @level2name = N''' + a.[column] + N'''' from dbo.[_FIAS] a for xml path(N''), type ).value(N'.', N'nvarchar(max)') exec (@sql)

Ja kodi që rezultoi dhe u ekzekutua si rezultat i punës

;

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по статусу актуальности в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ACTSTAT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией классификатора адресообразующих элементов БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по статусу центра в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_CENTERST';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по статусу актуальности КЛАДР 4.0 в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_CURENTST';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией классификатора адресообразующих элементов БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по номерам домов улиц городов и населенных пунктов, номера земельных участков и т.п в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по интервалам домов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по описанию мест расположения  имущественных объектов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по сведениям по нормативным документам, являющимся основанием присвоения адресному элементу наименования в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по признакам владения в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ESTSTAT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по типам помещений в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_FLATTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по номерам домов улиц городов и населенных пунктов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по интервалам домов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по статусу состояния домов  в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HSTSTAT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по статусу интервалов домов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_INTVSTAT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по описанию мест расположения  имущественных объектов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по типу нормативного документа в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NDOCTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по сведениям по нормативным документам, являющимся основанием присвоения адресному элементу наименования в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по статусу действия в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_OPERSTAT';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла со сведениями о помещениях'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по типам комнат в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOMTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по типам адресных объектов в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_SOCRBASE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла со сведениями о земельных участках'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состав и структура файла с информацией по признакам строения в БД ФИАС'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STRSTAT'

;

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор адресного объекта '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Формализованное наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'FORMALNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код региона'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'REGIONCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код автономии'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AUTOCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код района'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AREACODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код города'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CITYCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код внутригородского района'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CTARCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код населенного пункта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PLACECODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код элемента планировочной структуры'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PLANCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код улицы'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'STREETCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код дополнительного адресообразующего элемента'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'EXTRCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код подчиненного дополнительного адресообразующего элемента'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'SEXTCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Официальное наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OFFNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование типа объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'SHORTNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уровень адресного объекта '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AOLEVEL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор объекта родительского объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PARENTGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи. Ключевое поле.'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AOID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с предыдушей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PREVID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с последующей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'NEXTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0. '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код адресного объекта из КЛАДР 4.0 одной строкой без признака актуальности (последних двух цифр)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PLAINCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус актуальности адресного объекта ФИАС. Актуальный адрес на текущую дату. Обычно последняя запись об адресном объекте.
0 – Не актуальный
1 - Актуальный
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'ACTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус центра'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CENTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус действия над записью – причина появления записи (см. описание таблицы OperationStatus):
01 – Инициация;
10 – Добавление;
20 – Изменение;
21 – Групповое изменение;
30 – Удаление;
31 - Удаление вследствие удаления вышестоящего объекта;
40 – Присоединение адресного объекта (слияние);
41 – Переподчинение вследствие слияния вышестоящего объекта;
42 - Прекращение существования вследствие присоединения к другому адресному объекту;
43 - Создание нового адресного объекта в результате слияния адресных объектов;
50 – Переподчинение;
51 – Переподчинение вследствие переподчинения вышестоящего объекта;
60 – Прекращение существования вследствие дробления;
61 – Создание нового адресного объекта в результате дробления
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OPERSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус актуальности КЛАДР 4 (последние две цифры в коде)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CURRSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак действующего адресного объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'LIVESTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'
 Тип адресации:
 0 - не определено
 1 - муниципальный;
 2 - административно-территориальный
 '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'DIVTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор статуса (ключ)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_CURENTST'
	,@level2type = N'Column'
	,@level2name = N'CURENTSTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование (0 - актуальный, 1-50, 2-98 – исторический (кроме 51), 51 - переподчиненный, 99 - несуществующий)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_CURENTST'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_FLATTYPE'
	,@level2type = N'Column'
	,@level2name = N'SHORTNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип помещения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_FLATTYPE'
	,@level2type = N'Column'
	,@level2name = N'FLTYPEID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_FLATTYPE'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор статуса'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HSTSTAT'
	,@level2type = N'Column'
	,@level2name = N'HOUSESTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HSTSTAT'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи (ключ)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NDOCTYPE'
	,@level2type = N'Column'
	,@level2name = N'NDTYPEID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование типа нормативного документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NDOCTYPE'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор статуса (ключ)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_OPERSTAT'
	,@level2type = N'Column'
	,@level2name = N'OPERSTATID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование
01 – Инициация;
10 – Добавление;
20 – Изменение;
21 – Групповое изменение;
30 – Удаление;
31 - Удаление вследствие удаления вышестоящего объекта;
40 – Присоединение адресного объекта (слияние);
41 – Переподчинение вследствие слияния вышестоящего объекта;
42 - Прекращение существования вследствие присоединения к другому адресному объекту;
43 - Создание нового адресного объекта в результате слияния адресных объектов;
50 – Переподчинение;
51 – Переподчинение вследствие переподчинения вышестоящего объекта;
60 – Прекращение существования вследствие дробления;
61 – Создание нового адресного объекта в результате дробления;
70 – Восстановление объекта прекратившего существование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_OPERSTAT'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор адресного объекта '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Формализованное наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'FORMALNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код региона'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'REGIONCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код автономии'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AUTOCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код района'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AREACODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код города'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CITYCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код внутригородского района'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CTARCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код населенного пункта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PLACECODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код улицы'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'STREETCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код дополнительного адресообразующего элемента'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'EXTRCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код элемента планировочной структуры'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PLANCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код подчиненного дополнительного адресообразующего элемента'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'SEXTCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Официальное наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OFFNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование типа объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'SHORTNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уровень адресного объекта '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AOLEVEL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор объекта родительского объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PARENTGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи. Ключевое поле.'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'AOID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с предыдушей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PREVID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с последующей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'NEXTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0. '
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код адресного объекта из КЛАДР 4.0 одной строкой без признака актуальности (последних двух цифр)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'PLAINCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус актуальности адресного объекта ФИАС. Актуальный адрес на текущую дату. Обычно последняя запись об адресном объекте.
0 – Не актуальный
1 - Актуальный
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'ACTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус центра'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CENTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус действия над записью – причина появления записи (см. описание таблицы OperationStatus):
01 – Инициация;
10 – Добавление;
20 – Изменение;
21 – Групповое изменение;
30 – Удаление;
31 - Удаление вследствие удаления вышестоящего объекта;
40 – Присоединение адресного объекта (слияние);
41 – Переподчинение вследствие слияния вышестоящего объекта;
42 - Прекращение существования вследствие присоединения к другому адресному объекту;
43 - Создание нового адресного объекта в результате слияния адресных объектов;
50 – Переподчинение;
51 – Переподчинение вследствие переподчинения вышестоящего объекта;
60 – Прекращение существования вследствие дробления;
61 – Создание нового адресного объекта в результате дробления
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OPERSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус актуальности КЛАДР 4 (последние две цифры в коде)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'CURRSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак действующего адресного объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'LIVESTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_ADDROBJ'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Значение начала интервала'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTSTART';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Значение окончания интервала'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTEND';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи интервала домов'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'HOUSEINTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор интервала домов'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор объекта родительского объекта (улицы, города, населенного пункта и т.п.)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус интервала (обычный, четный, нечетный)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Счетчик записей домов для КЛАДР 4'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'COUNTER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор нормативного документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'NORMDOCID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор образа (внешний ключ)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCIMGID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус интервала (обычный, четный, нечетный)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор объекта родительского объекта (улицы, города, населенного пункта и т.п.)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор интервала домов'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи интервала домов'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'HOUSEINTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Значение начала интервала'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTSTART';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Значение окончания интервала'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'INTEND';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Счетчик записей домов для КЛАДР 4'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSEINT'
	,@level2type = N'Column'
	,@level2name = N'COUNTER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор статуса (обычный, четный, нечетный)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_INTVSTAT'
	,@level2type = N'Column'
	,@level2name = N'INTVSTATID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_INTVSTAT'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор ориентира'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'LANDGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор родительского объекта (улицы, города, населенного пункта и т.п.)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи ориентира'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'LANDID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Месторасположение ориентира'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'LOCATION';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор нормативного документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'NORMDOCID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип документа'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор образа (внешний ключ)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_NORMDOC'
	,@level2type = N'Column'
	,@level2name = N'DOCIMGID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOMTYPE'
	,@level2type = N'Column'
	,@level2name = N'SHORTNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOMTYPE'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип комнаты'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOMTYPE'
	,@level2type = N'Column'
	,@level2name = N'RMTYPEID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уровень адресного объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_SOCRBASE'
	,@level2type = N'Column'
	,@level2name = N'LEVEL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование типа объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_SOCRBASE'
	,@level2type = N'Column'
	,@level2name = N'SCNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Полное наименование типа объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_SOCRBASE'
	,@level2type = N'Column'
	,@level2name = N'SOCRNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Ключевое поле'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_SOCRBASE'
	,@level2type = N'Column'
	,@level2name = N'KOD_T_ST';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование
0 – Не актуальный
1 – Актуальный (последняя запись по адресному объекту)
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ACTSTAT'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор статуса (ключ)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ACTSTAT'
	,@level2type = N'Column'
	,@level2name = N'ACTSTATID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор статуса'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_CENTERST'
	,@level2type = N'Column'
	,@level2name = N'CENTERSTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_CENTERST'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата время внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'HOUSENUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак владения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'ESTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер корпуса'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'BUILDNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер строения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STRUCNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак строения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STRSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'HOUSEID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'HOUSEGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Guid записи родительского объекта (улицы, города, населенного пункта и т.п.)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состояние дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STATSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Счетчик записей домов для КЛАДР 4'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'COUNTER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Кадастровый номер'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'CADNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип адресации:
0 - не определено
1 - муниципальный;
2 - административно-территориальный'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'DIVTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак владения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ESTSTAT'
	,@level2type = N'Column'
	,@level2name = N'ESTSTATID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ESTSTAT'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ESTSTAT'
	,@level2type = N'Column'
	,@level2name = N'SHORTNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор адресного объекта (земельного участка)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'STEADGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер земельного участка'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'NUMBER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код региона'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'REGIONCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор объекта родительского объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'PARENTGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи. Ключевое поле.'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'STEADID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с предыдушей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'PREVID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с последующей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'NEXTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус действия над записью – причина появления записи (см. описание таблицы OperationStatus):
01 – Инициация;
10 – Добавление;
20 – Изменение;
21 – Групповое изменение;
30 – Удаление;
31 - Удаление вследствие удаления вышестоящего объекта;
40 – Присоединение адресного объекта (слияние);
41 – Переподчинение вследствие слияния вышестоящего объекта;
42 - Прекращение существования вследствие присоединения к другому адресному объекту;
43 - Создание нового адресного объекта в результате слияния адресных объектов;
50 – Переподчинение;
51 – Переподчинение вследствие переподчинения вышестоящего объекта;
60 – Прекращение существования вследствие дробления;
61 – Создание нового адресного объекта в результате дробления
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'OPERSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак действующего адресного объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'LIVESTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Кадастровый номер'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'CADNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип адресации:
0 - не определено
1 - муниципальный;
2 - административно-территориальный'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STEAD'
	,@level2type = N'Column'
	,@level2name = N'DIVTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Месторасположение ориентира'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'LOCATION';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи ориентира'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'LANDID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор ориентира'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'LANDGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор родительского объекта (улицы, города, населенного пункта и т.п.)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_DEL_LANDMARK'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код региона'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'REGIONCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'IFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ФЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSFL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'IFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код территориального участка ИФНС ЮЛ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'TERRIFNSUL';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKATO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'OKATO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'OKTMO'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'OKTMO';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата время внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'HOUSENUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак владения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'ESTSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер корпуса'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'BUILDNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер строения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STRUCNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак строения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STRSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'HOUSEID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'HOUSEGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Guid записи родительского объекта (улицы, города, населенного пункта и т.п.)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'AOGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Состояние дома'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'STATSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Счетчик записей домов для КЛАДР 4'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'COUNTER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Кадастровый номер'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'CADNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип адресации:
0 - не определено
1 - муниципальный;
2 - административно-территориальный'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_HOUSE'
	,@level2type = N'Column'
	,@level2name = N'DIVTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Глобальный уникальный идентификатор адресного объекта (помещения)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'ROOMGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер помещения или офиса'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'FLATNUMBER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип помещения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'FLATTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Номер комнаты'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'ROOMNUMBER';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Тип комнаты'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'ROOMTYPE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Код региона'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'REGIONCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Почтовый индекс'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'POSTALCODE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Дата внесения записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'UPDATEDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор родительского объекта (дома)'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'HOUSEGUID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Уникальный идентификатор записи. Ключевое поле.'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'ROOMID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с предыдушей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'PREVID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Идентификатор записи связывания с последующей исторической записью'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'NEXTID';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Начало действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'STARTDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Окончание действия записи'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'ENDDATE';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак действующего адресного объекта'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'LIVESTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Внешний ключ на нормативный документ'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'NORMDOC';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Статус действия над записью – причина появления записи (см. описание таблицы OperationStatus):
01 – Инициация;
10 – Добавление;
20 – Изменение;
21 – Групповое изменение;
30 – Удаление;
31 - Удаление вследствие удаления вышестоящего объекта;
40 – Присоединение адресного объекта (слияние);
41 – Переподчинение вследствие слияния вышестоящего объекта;
42 - Прекращение существования вследствие присоединения к другому адресному объекту;
43 - Создание нового адресного объекта в результате слияния адресных объектов;
50 – Переподчинение;
51 – Переподчинение вследствие переподчинения вышестоящего объекта;
60 – Прекращение существования вследствие дробления;
61 – Создание нового адресного объекта в результате дробления
'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'OPERSTATUS';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Кадастровый номер помещения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'CADNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Кадастровый номер комнаты в помещении'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_ROOM'
	,@level2type = N'Column'
	,@level2name = N'ROOMCADNUM';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STRSTAT'
	,@level2type = N'Column'
	,@level2name = N'NAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Краткое наименование'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STRSTAT'
	,@level2type = N'Column'
	,@level2name = N'SHORTNAME';

EXEC sp_addextendedproperty @name = 'description'
	,@value = N'Признак строения'
	,@level0type = N'Schema'
	,@level0name = N'dbo'
	,@level1type = N'Table'
	,@level1name = N'_STRSTAT'
	,@level2type = N'Column'
	,@level2name = N'STRSTATID'

5. Modifikojmë vetë skemat:

-- Përcaktimi i lidhjes për skemën e importuar
update a
Set x.modify ('declare namespace xs="http://www.w3.org/2001/XMLSchema";             
insert   as first
into (xs:schema)[1]')
from dbo.[_FIAS_SCHEMAS] a

-- Përcaktimi i atributit rrënjor
update a
Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema";             
insert (              
           attribute ss:is-constant {"1"}          
        )             
into (/xs:schema[1]/xs:element[1])')
from dbo.[_FIAS_SCHEMAS] a

-- Përcaktimi i nodës, që është rreshti i tabelës dhe tabela e lidhur me të
update a
Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema";             
insert (              
           attribute ss:relation {sql:column("a.table")}         
        )             
into (xs:schema[1]/xs:element[1]/xs:complexType[1]/xs:sequence[1]/xs:element[1])')
from dbo.[_FIAS_SCHEMAS] a

-- Annotimi i fushave në skemë
-- Përdorimi i një kursori pasi mund të modifikohet vetëm një nodë në një kohë
Declare @table nvarchar(4000)
Declare @column nvarchar(4000)

Declare cur CURSOR LOCAL FORWARD_ONLY
	for
	Select [table "" not found \/]
, [column] from dbo.[_FIAS] Open cur FETCH NEXT FROM cur into @table, @column WHILE @@FETCH_STATUS = 0 BEGIN update a Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema"; insert ( attribute ss:field {sql:column("t.column")} ,attribute ss:datatype {sql:column("b.sqltype")} ) into (//xs:attribute[@name = sql:column("b.column")])[1]') from dbo.[_FIAS_SCHEMAS] a inner join dbo.[_FIAS] b on a.[table "" not found \/]
= b.[table "" not found \/]
cross apply (Values(QUOTENAME(b.[column]))) t([column]) Where b.[table "" not found \/]
= @table and b.[column] = @column FETCH NEXT FROM cur into @table, @column END CLOSE cur; DEALLOCATE cur;

6. Dhe, në fund, do të nxjerrim skemat xsd në disk për përdorim të mëtejshëm:

-- Shkarkimi i skemave
-- Kërkojmë vëmendje, rruga për skemat që do të shkarkohen është e hardkoduar!
Set @sql = (
Select N'; exec xp_cmdshell ''bcp "Select [x] from [FIAS2].[dbo].[_FIAS_SCHEMAS] where [table “” not found \/]
= ''''' + a.[table “” not found \/]
+ '''''" queryout "c:filesFIAS' + a.[table “” not found \/]
+ '.xsd" -S . -T -w''' from dbo.[_FIAS_SCHEMAS] a for xml path(N''), type ).value(N'.', N'nvarchar(max)') exec (@sql)

Të gjitha! :-)))

Ja gjithë kërkesa që gjeneron tabelat, përshkrimet e tyre, modifikon skemat dhe i nxjerr ato në disk:

PËRDOR [FIAS2]
go

nëse OBJECT_ID('dbo.[_FIAS]') nuk është null 
	dropt table dbo.[_FIAS]
go

nëse OBJECT_ID('dbo._FIAS_SCHEMAS') nuk është null 
	dropt table dbo._FIAS_SCHEMAS
 go

Deklaro @schema sysname = N'dbo'
Deklaro @sql nvarchar(max)

Krijo tabelë dbo.[_FIAS_SCHEMAS] (x xml, [tabela "" nuk u gjet \/]
sysname) fut në dbo.[_FIAS_SCHEMAS] (x, [tabela "" nuk u gjet \/]
) Zgjidhni x = CAST(BulkColumn AS XML).query('.'), '_ACTSTAT' [table “” not found \/]
FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ACTSTAT_2_250_08_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ADDROBJ' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ADDROBJ_2_250_01_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_CENTERST' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_CENTERST_2_250_10_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_CURENTST' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_CURENTST_2_250_07_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_ADDROBJ' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_ADDROBJ_2_250_15_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_HOUSEINT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_HOUSEINT_2_250_17_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_HOUSE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_HOUSE_2_250_16_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_LANDMARK' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_LANDMARK_2_250_18_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_DEL_NORMDOC' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_DEL_NORMDOC_2_250_19_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ESTSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ESTSTAT_2_250_13_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_FLATTYPE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_FLATTYPE_2_250_23_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_HOUSEINT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_HOUSEINT_2_250_03_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_HOUSE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_HOUSE_2_250_02_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_HSTSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_HSTSTAT_2_250_12_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_INTVSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_INTVSTAT_2_250_11_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_LANDMARK' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_LANDMARK_2_250_04_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_NDOCTYPE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_NDOCTYPE_2_250_20_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_NORMDOC' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_NORMDOC_2_250_05_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_OPERSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_OPERSTAT_2_250_09_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ROOMTYPE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ROOMTYPE_2_250_24_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_ROOM' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_ROOM_2_250_21_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_SOCRBASE' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_SOCRBASE_2_250_06_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_STEAD' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_STEAD_2_250_22_04_01_01.xsd', SINGLE_BLOB) x Union all SELECT x = CAST(BulkColumn AS XML).query('.'), '_STRSTAT' FROM OPENROWSET(BULK 's01sq03c$filesFIASAS_STRSTAT_2_250_14_04_01_01.xsd', SINGLE_BLOB) x ;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xs) Select a.[table “” not found /]
,tbl.[root_name] ,tbl.[root_description] ,tbl.[name] ,ROW_NUMBER() over (partition by a.[table “” not found \/]
renditet sipas 1/0) N ,tbl.[kolona] ,tbl.[kërkuar] ,tbl.[përshkrimi] ,tbl.[tipi] ,tbl.[gjatësia] ,Rasti tbl.[tipi] kur N'byte' atëherë N'tinyint' kur N'date' atëherë N'date' kur N'int' atëherë N'int' kur N'string' atëherë Rasti kur tbl.[gjatësia] = 36 dhe (tbl.[kolona] si N'%ID' ose tbl.[kolona] = N'NORMDOC') atëherë N'uniqueidentifier' kur tbl.[gjatësia] është Null atëherë N'nvarchar(max)' Tjetër N'nvarchar(' + cast(tbl.[gjatësia] as nvarchar(4000)) + N')' FUND kur N'integer' atëherë Rasti kur tbl.[gjatësia] > 9 atëherë N'bigint' kur tbl.[gjatësia] <= 4 atëherë N'smallint' Tjetër N'int' FUND Tjetër N'nvarchar(max)' FUND [sqltype] ,t.n.query('.') [nod] shkruaj në dbo.[_FIAS] nga dbo.[_FIAS_SCHEMAS] a Cross apply a.x.nodes('//xs:attribute') t(n) Cross apply (vlerat -- disa fusha përdoren disa herë, prandaj do ta bëjmë kështu :) ( x.vlerë('(xs:schema[1]/xs:element[1]/@name)', 'nvarchar(255)') ,x.vlerë('(xs:schema[1]/xs:element[1]/xs:annotation/xs:documentation[1]/text())[1]', 'nvarchar(4000)') ,x.vlerë('(xs:schema[1]/xs:element[1]/xs:complexType[1]/xs:sequence[1]/xs:element[1]/@name)', 'nvarchar(255)') ,t.n.vlerë('(.@name)[1]', 'nvarchar(255)') ,t.n.vlerë('(.@use)[1]', 'nvarchar(255)') ,Stuff(Coalesce(t.n.vlerë('(.xs:simpleType/xs:restriction/@base)[1]', 'nvarchar(255)'), t.n.vlerë('(.@type)[1]', 'nvarchar(255)')), 1, 3, '') ,Coalesce(t.n.vlerë('(.xs:simpleType/xs:restriction/xs:length/@value)[1]', 'int') ,t.n.vlerë('(.xs:simpleType/xs:restriction/xs:maxLength/@value)[1]', 'int') ,t.n.vlerë('(.xs:simpleType/xs:restriction/xs:totalDigits/@value)[1]', 'int')) ,Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace( Replace(t.n.vlerë('(.xs:annotation/xs:documentation)[1]', 'nvarchar(4000)'), ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') , ' ', ' ') ) ) tbl([emri_korent], [përshkrimi_korent], [emri], [kolona], [kërkuar], [tipi], [gjatësia], [përshkrimi]) -- Le të shohim rezultatin Selekto * nga dbo.[_FIAS] -- Le të krijojmë kod për krijimin e tabelave, dhe ta ekzekutojmë atë set @sql = ( Selekto Distinct N';Krijo tabelë ' + Quotename(@schema) + N'.' + Quotename([tabela “” nuk u gjet \/]
) + N'(' + Stuff((Select N',' + QUOTENAME(b.[column]) + N' ' + b.[sqltype] + Case b.[required] when 'required' then N' NOT NULL' when 'optional' then N' NULL' End From dbo.[_FIAS] b where b.[table “” not found \/]
= a.[table “” not found \/]
Rendi sipas N ASC Për xml rrugë(N''), tip ).vlera(N'.', 'nvarchar(max)'), 1, 1, N'') + N')' nga dbo.[_FIAS] a Për xml rrugë(N''), tip).vlera(N'.', N'nvarchar(max)') exec (@sql) -- Le të krijojmë një annotim për tabelat dhe fushat Set @sql = ( Selekto N'; exec sp_addextendedproperty @name=''përshkrimi'', @value=N''' + a.[përshkrimi_korent] + N''', @level0type =N''Schema'', @level0name = N''' + @schema + N''', @level1type = N''Tabela'', @level1name = N''' + a.[tabela “” nuk u gjet \/]
+ N'''' from (Select distinct [table “” not found \/]
, [root_description] from dbo.[_FIAS]) a for xml path(N''), type ).value(N'.', N'nvarchar(max)') exec (@sql) Set @sql = ( Select N'; exec sp_addextendedproperty @name=''description'', @value=N'''' + a.[description] + N''', @level0type =N''Schema'', @level0name = N''' + @schema + N''', @level1type = N''Table'', @level1name = N''' + a.[table “” not found \/]
+ N''', @level2type = N''Column'', @level2name = N''' + a.[column] + N'''' from dbo.[_FIAS] a for xml path(N''), type ).value(N'.', N'nvarchar(max)') exec (@sql) -- Përcaktimi i lidhjes me skemën e importuar update a Set x.modify ('declare namespace xs="http://www.w3.org/2001/XMLSchema"; insert as first into (xs:schema)[1]') from dbo.[_FIAS_SCHEMAS] a -- Përcaktimi i atributit rrënjor update a Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema"; insert ( attribute ss:is-constant {"1"} ) into (\/xs:schema[1]\/xs:element[1])') from dbo.[_FIAS_SCHEMAS] a -- Përcaktimi i nodës, e cila është rreshti i tabelës dhe e lidhur me tabelën e saj update a Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema"; insert ( attribute ss:relation {sql:column("a.table")} ) into (xs:schema[1]\/xs:element[1]\/xs:complexType[1]\/xs:sequence[1]\/xs:element[1])') from dbo.[_FIAS_SCHEMAS] a -- Annotimi i fushave në skemë -- Sepse në një herë mund të modifikohet vetëm një nodë - do të duhet të përdorim një kursori Declare @table nvarchar(4000) Declare @column nvarchar(4000) Declare cur CURSOR LOCAL FORWARD_ONLY for Select [table "" not found \/]
, [column] from dbo.[_FIAS] Open cur FETCH NEXT FROM cur into @table, @column WHILE @@FETCH_STATUS = 0 BEGIN update a Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema"; insert ( attribute ss:field {sql:column("t.column")} ,attribute ss:datatype {sql:column("b.sqltype")} ) into (//xs:attribute[@name = sql:column("b.column")])[1]') from dbo.[_FIAS_SCHEMAS] a inner join dbo.[_FIAS] b on a.[table "" not found \/]
= b.[table "" not found \/]
cross apply (Values(QUOTENAME(b.[column]))) t([column]) Where b.[table "" not found \/]
= @table and b.[column] = @column FETCH NEXT FROM cur into @table, @column END CLOSE cur; DEALLOCATE cur; -- Nxjerrja e skemave -- Vini re, rruga për skemat që do të nxirren është e hardkoduar! Set @sql = ( Select N'; exec xp_cmdshell ''bcp "Select [x] from [FIAS2].[dbo].[_FIAS_SCHEMAS] where [table "" not found \/]
= ''''' + a.[table “” not found \/]
+ '''''" queryout "c:filesFIAS' + a.[table “” not found \/]
+ '.xsd" -S . -T -w''' from dbo.[_FIAS_SCHEMAS] a for xml path(N''), type ).value(N'.', N'nvarchar(max)') exec (@sql)

Tani mbetet vetëm të thërrasim procedurën e ngarkimit për çdo skedar xml me skemën përkatëse (skedarët e dekompresuar ruhen në dosjen e:tmp, ndërsa skemat - ne i nxorëm në c:filesFIAS):

PËRDOR FIAS2
SHKO

Deklaro @sql nvarchar(max)

nëse OBJECT_ID('tempdb..#t') nuk është null
	drop table #t

Krijo tabelën #t ([output] sysname NULL)

shtojë në #t
exec xp_cmdshell 'dir e:tmp /B'

;Me ngarko_të_dhënat si
(
Zgjidh 
'_' + t.x.value('(a[2])', 'nvarchar(255)') [tabela "" nuk u gjet "]
,t.x.value('(a[3])', 'date') [data_fias] ,t.x.value('(a[4])', 'uniqueidentifier') [fias_guid] ,a.[output] [emri_fajlit] nga #t a cross apply (VLERAT(Cast('<a>' + Zëvendëso(Zëvendëso(Zëvendëso(Zëvendëso(a.[output],'DEL_', 'DEL$'), '_', '<\/a><a>'), '.', '<\/a><a>'), '$', '_') + '<\/a>' si xml))) t(x) Ku [output] si 'AS[_]%.xml' ) Zgjidh @sql = (Zgjidh N';exec [dbo].[spXMLBulkLoad] ''e:tmp' + a.[emri_fajlit] + ''', ''c:filesFIAS' + b.[tabela "" nuk u gjet "]
+ '.xsd'', ''FIAS2'', ''e:tmperr.xml''' nga ngarko_të_dhënat a brenda bashkohen [dbo].[_FIAS_SCHEMAS] b mbi a.[tabela "" nuk u gjet "]
= b.[table "" not found \/]
Për xml path(''), lloj).vlerë(N'.', N'nvarchar(max)') Exec (@sql)

Ffff…

Ja pra, tani përfundimisht gjithçka është gati.

Megjithatë, ja çfarë dua t'ju them, kolegë të nderuar!
Gjithçka funksionon thjesht e çmendur shumë ngadalë!
Nuk kam parasysh krijimin e tabelave dhe skemave, sigurisht. Por ngarkimin.

Në mjedisin testues, ngarkimi im zgjati pa mëshirë 5 orë (sic!!!). Dhe kjo ende pa indekse tabelash.

Gjatë kësaj, ngarkimi i sistemit të hyrjes-daljes ishte në nivelin 3 Mb/s, dhe ishin përfshirë vetëm disa bërthama.

Ngarkimi i objekteve adresore shkoi me shpejtësi prej më shumë se 3 mijë regjistrimesh në sekondë, ngarkimi i shtëpive - me shpejtësi prej më shumë se 8 mijë në sekondë. Dhe për momentin, janë 60 milion.
Së cilës shkak ka të bëjë - nuk mund ta them, do të duhet të mësoj më shumë rreth kodit dhe, duket, konfigurimit të VM.

Kujdes, që ngarkimi bëhet në grupe. Dhe më pas pritet të krijohen indekse klasteri për të gjitha AOID e tyre.

Për shkak se ato paraqesin GUID, është më mirë ta bëjmë kështu, sepse nëse krijohen indekse klasteri PARA ngarkimit - rezultati do të jetë një tabelë, e fragmentuar diku rreth 50%, jo më pak. Po ashtu, indekset është më mirë të krijohen pas ngarkimit, sepse futja në indekse e bën ngarkimin edhe më të ngadalshëm.

Pikërisht për këtë, emrat e tabelave të mia fillojnë me një nënvijzë (_). Parashikohej që të ngarkohem fillimisht me të dhëna në to, më pas të rikrijoj indekset e tabelave të synuara, dhe, pastaj, qetësisht të bëj Alter table switch.

Po ashtu, kushtojini vëmendje llojeve të dhënash që nuk janë krejtësisht optimale për fushat e tabelave FIAS.
Për shembull, përdorimi i int, aty ku mjafton tinyint, ose nvarchar në fushat, ku pritet të ruhen vetëm vlera numerike, si kodi i rajonit ose OKATO.
Kështu në skemat :-(.

Megjithatë, nuk ka asgjë që ju pengon, pas krijimeve të tabelës së metadatat, [dbo].[_FIAS], të ngjiteni me duar në të dhe të bëni tuning, dhe pastaj, të krijoni skemat e reja të ngarkimit mbi bazën e metadatarave të rregulluar.

Nëse nuk do të arrini dot të eliminoni këtë ngarkesë të ngadalshme, duket se do të duhet të ktheheni në variantin e ngarkimit nga dbf, dhe përfundimisht të shqyrtoni krakarët në dbf të vogla. Dhe të shkruani një tjetër artikull.

dbf u ngarkua normalisht në 8 rrjedha për 1 orë e pak, dhe rreth një orë tjetër shkoi për të bashkuar tabelat individuale në ato që janë objektiv, dhe për ndërtimin e indekseve mbi to.

… Ose, përfundimisht, të nxirrni duar nga jzhj… ehh… afedroni, dhe të bëni një aplikacion të rregullt për tier të dhënash, dhe të ngarkoni të dhënat siç bëjnë të gjithë njerëzit normalë, përmes SSIS.

Por kjo është një histori krejt tjetër.

→ Skripta dhe xsd-skemat

Linke të lidhura:

→ FIAS

Imazhi me qenin — nuk është imja 🙂

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster