FIAST MSSQLSERVER adatbázisba történő betöltése segédprogramokkal (SQLXMLBULKLOAD). Hogyan (valószínűleg) nem kellene ezt csinálni

Epigraf:
„Amikor kalapács van a kezedben, minden körülötted szögnek tűnik.”

FIAST MSSQLSERVER adatbázisba történő betöltése segédprogramokkal (SQLXMLBULKLOAD). Hogyan (valószínűleg) nem kellene ezt csinálni
Valaha, úgy tűnik – múlt pénteken, az irodai környéket járva, a szerencsétlen főnökség azzal foglalkozott, hogy időt töltök tétlenséggel és macskák nézegetésével.

— Nem lenne jobb meglőnöd a FIAS-t, barátom! – mondta a főnökség. – Mert a betöltési folyamat valahogy nem tetszik az üzleti részlegeinknek. Hosszú, mondják, hogy a termék szerver tölti be, és a fickó, aki írta a betöltési folyamatot, legutóbb távozott tőlünk, már körülbelül három éve.
Ráadásul mindent át kellene alakítani, szóval vedd fel, készíts egy adatbázist, és biztosítsd a FIAS periódikus feltöltését. Szóval, ahogy mondani szokták, nem tartalak fel!

Itt meg kell mondanom, hogy a programozáshoz távoli kapcsolatom van, mivel inkább DBA vagyok. De más oldalról nézve, a nagy mennyiségű előkészített információ betöltése – pontosan a DBA feladata, nem igaz?

— Na jó… Most megcsináljuk – mondtam a főnökségnek, és nekilendültem a FIAS webhelyének, feltűrt ingujjakkal.

„Ó! Itt van dbf!” – gondoltam, örömmel dörzsölve a kezeimet, miközben meglepődve tapasztaltam a standard „de-facto” zip archívum hiányát, és ezzel szemben a régmúlt arj jelenlétét és a szabad, természetesen, 7zip-et [de amit azért nem lehet kicsomagolni a powershell Expand-Archive segítségével]. Tehát tiszta powershell-lal ezt nem lehet letölteni és kicsomagolni. Jönnie kell valami fölösleges cuccnak a szerverre. Na mindegy.

Az dbf fájlok tömeges párhuzamos feltöltésére szolgáló eszközt már pár éve megírtam, úgyhogy problémának nem kellene lennie.

Kicsomagoltam a dbf fájlokat, elindítottam a betöltő programot, és amíg az adatok betöltődtek, írtam egy kis scriptet, ami egyesítette a különféle „majdnem-azonos” táblázatokat egybe, a hovatartozás szerint.

Betöltöttem az adatokat, és már indultam volna az igazgatóság irodájába, hogy megkossan a babérokat, de az ördög megrántotta a csuklómat, hogy megnézzem a betöltési eredményeket!

FIAST MSSQLSERVER adatbázisba történő betöltése segédprogramokkal (SQLXMLBULKLOAD). Hogyan (valószínűleg) nem kellene ezt csinálni

— Ups. WTF!!!???

FIAST MSSQLSERVER adatbázisba történő betöltése segédprogramokkal (SQLXMLBULKLOAD). Hogyan (valószínűleg) nem kellene ezt csinálni

A nagy táblázatok normálisan töltődtek be, míg a kicsik – „krakozábarokat” tartalmaztak.

Annyira szomorú és lehangolt lettem az egésztől, hogy bátran összeszedtem magam, és a procrastinációmmal és a közvetlen feladataimmal foglalkoztam. Nagyon nem akartam bajlódni a tönkrement dbf fájlokkal.

Két napig halogattam, amíg a jelentkezések elfogytak, és a láthatáron újra megjelent a főnökség a szent kérdéssel: "Na miért pihentetjük a dolgot?"

Mivel nem volt mit válaszolni, és továbbra sem akartam a dbf-fel pepecselni, úgy döntöttem, hogy xml-ből töltöm fel a FIAS-t, különösen, mert, ahogyan mondják, stílusos, divatos, fiatalos, és a 'dbf - haldokló formátum'.
Ezzel szeretném befejezni a hosszúra nyúlt bevezető monológot, és áttérni a lényegre.

Epigram 2:
Igen, ez is lehet. 🙂

Tehát, a segítségével döntöttünk a betöltésről SQLXMLBULKLOAD – csodálatos könyvtár, amely kifejezetten struktúrált xml fájlok tömeges (bulk) betöltésére lett tervezve.
Ahhoz, hogy használni tudjuk, szükséges letölteni és telepíteni a SqlXml 4.0 Service Pack 1 (SP1) könyvtárat.

A FIAS esetében azonban a 'struktúráltság' nem különösebben keresett. Mivel a fájlok nem annyira nem xml... természetesen xml, de valójában ezek lapos táblázatok adatokkal, minden fájlban - egy táblázat.

A sql.ru oldalon találtam a spXMLBulkLoad tisztelt felhasználótól Mnior, hogy teljesen ki ne lépjünk az SQL szerver kereteiből, és még a SQLXMLBULKLOAD hívást se kelljen megírni CLR-hez.

Itt egy kissé módosított változata:

spXMLBulkLoad

HASZNÁLD [FIAS2]
GO

/****** Objektum:  TároltEljárás [dbo].[spXMLBulkLoad]    Szkript Dátum: 13.05.2019 18:05:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- Engedélyezni kell az Ole Automation Procedures-t:
	-- EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;

-- Példa:
	-- EXEC dbo.spXMLBulkLoad 'Z:PathData.xml','Z:PathSchema.xsd', 'FIAS', 'Z:Patherror.xml'

CREATE PROCEDURE [dbo].[spXMLBulkLoad] (
	 @File		SysName
	,@Schema	SysName
	,@DataBase	SysName	= ''
	,@ErrorLog	SysName
) AS 
BEGIN 
	DECLARE	 @ErrCode	Int
		,@OLEXMLBulk	Int
		,@ErrMethod		SysName
		,@ErrDescript	NVarChar(4000)
	
	EXEC @ErrCode = sys.sp_OACreate 'SQLXMLBulkLoad.SQLXMLBulkload', @OLEXMLBulk OUT
	IF (@ErrCode = 0) 
	BEGIN
		SET	@DataBase	= 'Provider=SQLOLEDB;Data Source=.;DataBase=' + @DataBase + ';Integrated Security=SSPI'
		EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk ,'ConnectionString', @DataBase		
			IF (@ErrCode  0) 
				BEGIN SET @ErrMethod = 'ConnectionString'	
					  GOTO Error 
				END
		EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk ,'ErrorLogFile', @ErrorLog		
			IF (@ErrCode  0) 
				BEGIN SET @ErrMethod = 'ErrorLogFile'	
					  GOTO Error 
				END

		EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk, 'CheckConstraints', 1			
			IF (@ErrCode  0) 
				BEGIN SET @ErrMethod = 'CheckConstraints'	
					  GOTO Error 
				END

		--EXEC @ErrCode = sys.sp_OASetProperty @OLEXMLBulk, 'ForceTableLock', 1			
		--	IF (@ErrCode  0) 
		--		BEGIN SET @ErrMethod = 'ForceTableLock'	
		--			  GOTO Error 
		--		END
		
		EXEC @ErrCode = sys.sp_OAMethod	@OLEXMLBulk, 'Execute', NULL, @Schema, @File
		IF (@ErrCode  0) 
		BEGIN
			SET @ErrMethod = 'Execute'
			DECLARE	 @Exist	Int
					,@Error	XML
				    ,@SQL	NvarChar(max)
			EXEC master.dbo.xp_FileExist @ErrorLog, @Exist OUT
			IF (@Exist = 1) 
			BEGIN
				 -- Az @ErrorLog fájlból
				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)
			END 
			ELSE
				GOTO Error
		END
		GOTO Destroy
	Error:	
			EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEXMLBulk, @ErrorLog OUT, @ErrDescript OUT
	Destroy:
			EXEC @ErrCode = sys.sp_OADestroy @OLEXMLBulk
	END 
	ELSE
		SELECT	 
			 @ErrMethod	= 'SQLXMLBulkLoad.SQLXMLBulkload'
			,@ErrorLog	= 'sp_OACreate'
			,@ErrDescript	= 'Hiba az OLE objektum létrehozásakor'
	
	-- Hibák kiírása
	IF (@ErrMethod IS NOT NULL) 
	BEGIN
		RAISERROR('Hiba a "%s" metódus "%s" végrehajtása során: %s',18,1, @ErrMethod, @ErrorLog, @ErrDescript)
		RETURN	@@Error
	END
END
GO

Azonban a tömeges XML betöltéshez ezzel a könyvtárral szükségesek az annotált XSD séma, amelyekben meg van határozva, hogy pontosan hogyan és hová történik a betöltés.

Olyan jelzések, hogy ilyen sémák léteznek, „de csak régi” — tíz weboldalon találtam, de magukat a sémákat sehol sem találtam. És ezt rendkívül frusztrálódtam.

A FIAS website-on található séma kézi adatimportálásának módosítása – nem nehéz.
De… összességében – ott 271 mező van! Ez mennyi időt és szenvedést igényelhet!

Ezért úgy döntöttem, hogy automatikusan módosítom ezeket a sémákat, és ezzel együtt célzott táblákat is létrehozok az adatbázisban.

Az SQLXMLBULKLOAD képes automatikusan létrehozni a táblákat a feltöltött adatokhoz az annotált sémából, de ha már létrehozom ezt a sémát, miért ne készíteném el magam ezeket a táblákat is, ahogyan nekem szükséges?

Letöltöttem az xsd sémákat a FIAS webhelyéről, és tisztán vizuálisan elemeztem őket.

Szerencsére mindegyik azonos típusú, ezért csak néhány nem túl bonyolult lekérdezéssel létrehozhatók a célzott adatbázisok és módosíthatók a sémák az adatfeltöltéshez.

1. Létrehozunk egy üres FIAS2 adatbázist.
Miért a „2”? Nos, azért, mert az „1” a dbf fájlokból készült adatbázis volt. Talán később beszélünk róla.

A FIAS2 adatbázis létrehozó scriptje

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. Hozzunk létre néhány táblát ebben az adatbázisban.

Az első tábla az xsd sémákat fogja tartalmazni, a második pedig gyakorlatilag az ezen xsd sémákból kapott adatbázis sémát fogja képviselni.

Az xsd sémák valójában szokásos xml fájlok, tehát velük úgyis dolgozhatunk, mint a normál xml-ekkel.

HASZNÁLD [FIAS2]
menj

ha az OBJECT_ID('dbo.[_FIAS]') nem null 
	töröld a táblát dbo.[_FIAS]
menj

ha az OBJECT_ID('dbo._FIAS_SCHEMAS') nem null 
	töröld a táblát dbo.[_FIAS_SCHEMAS]
menj

Hozz létre táblát dbo.[_FIAS_SCHEMAS] (x xml, [table “” not found /]
sysname) menj -- Első lekérdezés: Betöltjük a sémákat a táblába a szerveren, további manipulációkhoz. insert into dbo.[_FIAS_SCHEMAS] (x, [table “” not found /]
) SELECT 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 -- Második lekérdezés: Ezresítjük a sémákat, és létrehozunk egy munkatáblát a metaadatokkal ;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 -- egyes mezők többször is felhasználásra kerülnek, ezért így csináljuk :) ( 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]) -- Nézzük az eredményt Select * from dbo.[_FIAS]

Részletesen a lekérdezésekről:

Az első - az xsd sémákat tölti fel a táblába a szerveren, miközben minden sémát annotál az [table "" not found \/] mezőben.
– a tábla nevét, ahová az adatokat szeretném feltölteni az adott táblából.

Természetesen lehetett volna úgy megoldani, hogy minden alkalommal, amikor a sémák megváltoznak, azokat le lehessen tölteni, betenni egy mappába, és újra létrehozni a cél táblák struktúráját automatikusan, és újra automatikusan módosítani a sémákat, de mivel a struktúra rendkívül ritkán változik – legutóbb 16-ban – ennek az automatizálására elég lusta vagyok. Jobb 30 másodpercet rászánni a CTRL+C – CTRL+V-re.

Ezért van a sémák táblázatba töltése ilyen hardkódozva, és a betöltendő fájlok elérési útvonalai, valamint a táblázatok nevei kézzel vannak megadva.

A második lekérdezés – információt nyer ki a sémákból a táblák szerkezetéről. Nem kezdtem el bajlódni a 3NF-el, hanem kiterjesztettem azt egyetlen táblázatként.

Egyébként érdemes figyelni erre a részre (+)

Elég gyakran kérdezik a kezdők, hogy lehet-e egy bonyolult kifejezést egyszer kiszámolni a lekérdezésben, és aztán többször felhasználni különböző helyeken. Igen, lehet. Például így:

from dbo.[_FIAS_SCHEMAS] a
	Cross apply a.x.nodes('\\xs:attribute') t(n)
	Cross apply 
			(values -- néhány mezőt többször használnak, ezért így csináljuk :) 
			(
			 x.value('(xs:schema[1]\/xs:element[1]\/@name)', 'nvarchar(255)')
, ... itt lehet felsorolni az összes bonyolultan kiszámolt mezőt, hogy később bármely részén fel lehessen használni a lekérdezésnek
			)
			) tbl([root_name], [root_description], [name], [column], [required], [type], [len], [description])

Természetesen vannak bizonyos korlátai. De ha elkezdi használni, gyorsan meg fogja érteni, hogy mik ezek.

3. Készítsünk scriptet, amely létrehozza a FIAS táblákat, majd futtassuk őket, és hozzuk létre magukat a táblákat:


Deklarálj @schema sysname = N'dbo'
Deklarálj @sql nvarchar(max)

-- Készítsük el a táblák létrehozásához szükséges kódot, és futtassuk le
set @sql = (
	Select Distinct 
		N';Create table ' 
		+ 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 For xml path(N''), type ).value(N'.', 'nvarchar(max)'), 1, 1, N'') + N')' from dbo.[_FIAS] a For xml path(N''), type).value(N'.', N'nvarchar(max)') exec (@sql)

Akinek lustája mindezt megcsinálni – a táblák létrehozásához szükséges scriptek és az annotált FIAS sémák a cikk végén lesznek csatolva.

A táblák létrehozására vonatkozó lekérdezés, amely a lekérdezés működése során keletkezett.

;

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. Mivel az xsd normális leírást tartalmaz a táblázatokról és a mezőkről – használjuk ezt, és készítsük el a struktúra leírását a táblázatok és mezők kiterjesztett tulajdonságaiban:

-- Létrehozunk annotációt a táblákhoz és mezőkhöz
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)

Íme a kód, ami a munka eredményeként készült és végrehajtódott

;

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. Módosítjuk magukat a sémákat:

-- Hivatkozás importált sémára
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

-- Gyökér attribútum meghatározása
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

-- A nod meghatározása, amely a táblázat sora és a hozzá kapcsolódó táblázat
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

-- Mezők annotálása a sémában
-- Mivel egyszerre csak egy nodot lehet módosítani - kurzort kell használni
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. Végül, exportáljuk az xsd sémákat a lemezre további használatra:

-- Sémák exportálása
-- Kérjük, vegye figyelembe, hogy az exportálásra kerülő sémák útvonala - keménykódolt!
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)

Ennyi! :-)))

Itt van az összes lekérdezés, ami generálja a táblázatokat, azok leírását, módosítja a sémákat és exportálja őket a lemezre:

HASZNÁLJA [FIAS2]

menj

ha az OBJECT_ID('dbo.[_FIAS]') nem null 
	dobja a táblát dbo.[_FIAS]
menj

ha az OBJECT_ID('dbo._FIAS_SCHEMAS') nem null 
	dobja a táblát dbo.[_FIAS_SCHEMAS]
menj

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

Hozzon létre táblát dbo.[_FIAS_SCHEMAS] (x xml, [tábla "" nem található \/]
sysname) illessze be a dbo.[_FIAS_SCHEMAS] táblába (x, [tábla "" nem található \/]
) SELECT 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 \/]
rendezés 1/0) N ,tbl.[oszlop] ,tbl.[kötelező] ,tbl.[leírás] ,tbl.[típus] ,tbl.[hossz] ,Case tbl.[típus] amikor N'bájt' akkor N'tinyint' amikor N'dátum' akkor N'dátum' amikor N'int' akkor N'int' amikor N'string' akkor Case amikor tbl.[hossz] = 36 és (tbl.[oszlop] hasonlít N'%ID' vagy tbl.[oszlop] = N'NORMDOC') akkor N'uniqueidentifier' amikor tbl.[hossz] üres akkor N'nvarchar(max)' Egyébként N'nvarchar(' + cast(tbl.[hossz] as nvarchar(4000)) + N')' VÉG amikor N'integer' akkor Case amikor tbl.[hossz] > 9 akkor N'bigint' amikor tbl.[hossz] <= 4 akkor N'smallint' Egyébként N'int' végén egyébként N'nvarchar(max)' VÉG [sqltípus] ,t.n.query('.') [csomópont] be a dbo.[_FIAS] from dbo.[_FIAS_SCHEMAS] a Keresztezve alkalmazza a a.x.nodes('//xs:attribute') t(n) Keresztezve (értékek -- egyes mezők többször is használatban vannak, ezért így csináljuk :) ( 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([gyökér_név], [gyökér_leírás], [név], [oszlop], [kötelező], [típus], [hossz], [leírás]) -- Nézzük meg az eredményt Select * from dbo.[_FIAS] -- Kódot hozunk létre a táblák létrehozásához, és futtatjuk azt set @sql = ( Select Distinct N';Create table ' + Quotename(@schema) + N'.' + Quotename([table "" nem található \/]
) + 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 "]
Rendelés N ASC For xml path(N''), type ).value(N'.', 'nvarchar(max)'), 1, 1, N'') + N')' from dbo.[_FIAS] a For xml path(N''), type).value(N'.', N'nvarchar(max)') exec (@sql) -- Hozzunk létre megjegyzést a táblákhoz és mezőkhöz Set @sql = ( Select N'; exec sp_addextendedproperty @name=''description'', @value=N''' + a.[gyökér_leírás] + N''', @level0type =N''Schema'', @level0name = N''' + @schema + N''', @level1type = N''Table'', @level1name = N''' + a.[table "" nem található \/]
+ 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) -- Importált séma hivatkozás meghatározása 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 -- Gyökér attribútum meghatározása 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 -- A táblázatot és a hozzá kapcsolt táblát képviselő csomópont meghatározása 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 -- Mezők annotálása a séma részében -- Mivel egyszerre csak egy csomópontot lehet módosítani, kurzort kell használni 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; -- Sémák exportálása -- Kérjük, vegye figyelembe, hogy az exportált sémákhoz vezető útvonal meg van keményítve! 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)

Most már csak annyit kell tennünk, hogy meghívjuk a betöltési eljárást minden xml fájlhoz a megfelelő sémával (az ügyfél dekódolt fájljai az e:tmp mappában találhatók, a sémákat pedig a c:filesFIAS mappába exportáltuk):

HASZNÁLD A FIAS2
INDÍTÁS

Deklaráld @sql nvarchar(max)

ha az OBJECT_ID('tempdb..#t') nem nulla
	DROP TABLE #t

Hozz létre táblát #t ([output] sysname NULL)

Helyezd be a #t-be
EXEC xp_cmdshell 'dir e:tmp /B'

;WITH load_data AS
(
Válaszd ki 
'_' + t.x.value('(a[2])', 'nvarchar(255)') [table “” not found
,t.x.value('(a[3])', 'date') [fias_date] ,t.x.value('(a[4])', 'uniqueidentifier') [fias_guid] ,a.[output] [file_name] FROM #t a CROSS APPLY (VALUES(Cast('<a>' + Replace(Replace(Replace(Replace(a.[output],'DEL_', 'DEL$'), '_', '<\/a><a>'), '.', '<\/a><a>'), '$', '_') + '<\/a>' AS XML))) t(x) HOL [output] LIKE 'AS[_]%.xml' ) Válaszd @sql = (Válaszd N';EXEC [dbo].[spXMLBulkLoad] ''e:tmp' + a.[file_name] + ''', ''c:filesFIAS' + b.[table “” not found
+ '.xsd'', ''FIAS2'', ''e:tmperr.xml''' FROM load_data a INNER JOIN [dbo].[_FIAS_SCHEMAS] b ON a.[table “” not found
= b.[table “” not found \/]
For XML PATH(''), TYPE).VALUE(N'.', N'nvarchar(max)') EXEC (@sql)

Hah…

Nos, most végre minden kész.

De szeretném mondani nektek, tisztelt kollégák!
Mindez egyszerűen működik hihetetlenül lassan!
Nem a táblázatok és sémák létrehozásáról beszélek, persze. Hanem a betöltésről.

A tesztkörnyezetben a betöltés nálam nem kevesebb mint 5 óráig (sic!!!). És ez még az indexelés nélkül.

A bemeneti/output rendszer betöltése 3 MB/s szinten volt, és mindössze pár magot használtunk.

A címzett objektumok betöltése nem haladta meg a 3000 rekord másodpercenként, a házaké pedig nem haladta meg a 8000-et másodpercenként. És ezekből, hogy is mondjam, 60 millió van.
Ezt mi okozza – nem tudom megmondani, még meg kell nézni a kódot, és valószínűleg a VM beállításait is.

Kérjük, vegye figyelembe, hogy a betöltés kötegekben történik. Aztán később kellene klaszter indexeket létrehozni különböző AOID-ok alapján.

Mivel ezek GUID-ként jelennek meg, jobb így csinálni, mert ha a betöltés ELŐTT létrehozunk klaszter indexeket – a kimenet egy 50%-kal fragmentált táblázat lesz, nem kevesebb. Az indexeket is érdemes a betöltés után létrehozni, mert az indexekre való beillesztés még lassabbá teszi a betöltést.

Ezért a táblázatok nevei nálam aláhúzással ( _ ) kezdődnek. Az volt a terv, hogy először betöltöm az adatokat, aztán létrehozom a cél táblázatok indexeit, majd nyugodtan végrehajtom az Alter table switch-t.

Kérjük, figyeljen arra is, hogy nem teljesen optimális adatmezőtípusokat használtunk a FIAS táblák mezőinél.
Például az int használata ott, ahol elegendő a tinyint, vagy nvarchar mezőkben, ahol csak numerikus értékek tárolása van előirányozva, mint a régiókód vagy az OKATO.
Ez a sémákban van :(-.

Ugyanakkor semmi sem akadályozza meg, hogy miután létrehozta a metadátum táblát, [dbo].[_FIAS], kézzel is beleássa magát, elvégezze a finomhangolást, majd új betöltési sémákat hozzon létre az optimalizált metadátumok alapján.

Nos, ha mégsem sikerül megszüntetni a lassú betöltést, úgy tűnik, vissza kell térni a dbf-ből való betöltéshez, és végre kibogozni a kis dbf-ek krakóziáit. És írni egy újabb cikket.

A dbf nyolc szálon normálisan betöltődött másfél óra alatt, és körülbelül egy óra ment el az egyes táblák célzottakba való egyesítésére és az indexek felépítésére.

… Nos, vagy végre húzza ki a kezeit a jhh… ööö… efedrónból, és végre készítsen egy normális adat réteg alkalmazást, és mármint töltsön be adatokat, mint minden normális ember, SSIS-en keresztül.

De ez már egy teljesen másik történet.

→ Scriptek és xsd sémák

Témába vágó hivatkozások:

→ FIAS

A kutyás kép - nem az enyém 🙂

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster