Loading FIAS into the database on MSSQLSERVER using makeshift (SQLXMLBULKLOAD) means. How this (probably) should not be done.

Epigraph:
"When you have a hammer in your hand, everything around seems like nails."

Loading FIAS into the database on MSSQLSERVER using makeshift (SQLXMLBULKLOAD) means. How this (probably) should not be done.
Once upon a time, it seems – last Friday, while walking around the office, the cursed management was concerned that I was spending time idly contemplating cats.

— How about uploading the FIAS, my dear friend! – said management. – Because our business units are not pleased with the loading process. They say it takes too long, it loads from the product server, and the guy who wrote the loading process quit recently, about three years ago.
Moreover, everything there needs to be redone, so just take it, create a database for yourself, and ensure regular FIAS uploads. That's it, as they say, I won't keep you!

It must be said that I have a distant relationship with programming, since I am more of a DBA. Although, on the other hand, loading large arrays of pre-processed information is precisely the DBA's task, isn't it?

— Come on… We'll do it now – I said to management, and rushed to the FIAS website, rolling up my sleeves.

"Oh! There's a dbf here!" — I thought, happily rubbing my hands together, while marveling at the absence of a standard 'de facto' zip archive, and, on the contrary, the presence of the long-gone arj and a proprietary pardon, open, of course, 7zip [but which still can't be unpacked using powershell Expand-Archive]. That is, you can't download and unpack it with pure powershell. You'll have to load all sorts of junk onto the server. Well, whatever.

I have written a tool for mass parallel loading of dbf files for many years, so there shouldn't be any problems.

I unpacked the dbfs, launched the loading program, and while the data was loading, I drafted a little script that glued together separate 'almost-identically-named' tables into one, based on their belonging.

I loaded the data, and was about to go to the management office to claim my, so to speak, laurels, but something prompted me to check the import results!

Loading FIAS into the database on MSSQLSERVER using makeshift (SQLXMLBULKLOAD) means. How this (probably) should not be done.

— Oops. WTF!!!???

Loading FIAS into the database on MSSQLSERVER using makeshift (SQLXMLBULKLOAD) means. How this (probably) should not be done.

Large tables loaded fine, but the small ones contained gibberish.

And so I became so sad and gloomy about all this that I bravely pulled myself together and turned to procrastination and my direct duties. Dealing with corrupted dbfs was something I really didn't want to do.

I procrastinated for about two days until the applications ran out, and then management reappeared on the horizon with the sacramental question, 'Why are we slacking off?'.

And since there was nothing to respond with, and I still didn't want to deal with dbf, I decided to load FIAS from XML, especially since it's stylish, trendy, young, and 'dbf is a dying format'.
With that, let's wrap up the lengthy introductory monologue and get to the point.

Epigraph 2:
Yes, that can be done too. 🙂

So, it was decided to load using SQLXMLBULKLOAD — a wonderful library specifically designed for bulk loading of structured XML files.
To use it, you need to download and install the SqlXml 4.0 Service Pack 1 (SP1) library.

In the case of FIAS, however, 'structuredness' is not particularly needed. The files are not just non-XML... they are indeed XML, but essentially they are flat tables with data, with each file containing one table.

On the sql.ru website, I found found the procedure spXMLBulkLoad courtesy of the respected user Mnior, to avoid stepping outside of SQL Server and not even having to call SQLXMLBULKLOAD in CLR.

Here’s a slightly modified version of it:

spXMLBulkLoad

USE [FIAS2]
GO

/****** Object:  StoredProcedure [dbo].[spXMLBulkLoad]    Script Date: 13.05.2019 18:05:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- Ole Automation Procedures must be enabled:
	-- EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;

-- Example:
	-- 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
				 -- From @ErrorLog file
				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	= 'Error creating OLE object'
	
	-- Output errors
	IF (@ErrMethod IS NOT NULL) 
	BEGIN
		RAISERROR('Error executing method "%s" in "%s": %s',18,1, @ErrMethod, @ErrorLog, @ErrDescript)
		RETURN	@@Error
	END
END
GO

However, to perform bulk XML loading using this library, annotated xsd schemas are required, which specify how and where the data is loaded.

I found mentions that such schemas exist, "but only the old ones" on a dozen sites, but I couldn’t find the schemas themselves, which was frustrating.

Modifying the existing FIAS schema for manual data import is not difficult.
But… in total, there are 271 fields! Just imagine how long that would take!

Therefore, I decided to modify these schemas automatically while also creating target tables in the database.

SQLXMLBULKLOAD can automatically create tables for the data being loaded from the annotated schema, but on the other hand, if I am going to create this schema, why not also make these tables myself, in the way that I need?

I downloaded the XSD schemas from the FIAS website and analyzed them visually.

Fortunately, they are all uniform, so it is possible to create the target database and modify the schemas for loading with just a few not very complex queries.

1. Let's create an empty database FIAS2.
Why '2'? Well, because '1' was a database made of DBF files. Perhaps we will talk about it later.

Script for creating the database FIAS2

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

2. Let's create a couple of tables in this database.

The first table will contain the XSD schemas, and the second one will represent the actual data schema obtained from these XSD schemas.

XSD schemas are actually ordinary XML files, so they can be worked with just like regular XML.

USE [FIAS2]
go

if OBJECT_ID('dbo.[_FIAS]') is not null 
	drop table dbo.[_FIAS]
go

if OBJECT_ID('dbo._FIAS_SCHEMAS') is not null 
	drop table dbo.[_FIAS_SCHEMAS]
go

Create table dbo.[_FIAS_SCHEMAS] (x xml, [table “” not found /]
sysname) go -- First query: We will load the schemas into the table on the server for further manipulation. 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 -- Second query: Extract schemas and create a working table with metadata ;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xs) Select a.[table “” not found /]
,tbl.[root_name] ,tbl.[root_description] ,tbl.[name] ,ROW_NUMBER() over (partition by a.[table “” not found \/]
order by 1\/0) N ,tbl.[column] ,tbl.[required] ,tbl.[description] ,tbl.[type] ,tbl.[len] ,Case tbl.[type] when N'byte' then N'tinyint' when N'date' then N'date' when N'int' then N'int' when N'string' then Case when tbl.[len] = 36 and (tbl.[column] like N'%ID' or tbl.[column] = N'NORMDOC') then N'uniqueidentifier' when tbl.[len] is Null then N'nvarchar(max)' Else N'nvarchar(' + cast(tbl.[len] as nvarchar(4000)) + N')' END when N'integer' then Case when tbl.[len] > 9 then N'bigint' when tbl.[len] <= 4 then N'smallint' Else N'int' end else N'nvarchar(max)' End [sqltype] ,t.n.query('.') [node] into dbo.[_FIAS] from dbo.[_FIAS_SCHEMAS] a Cross apply a.x.nodes('\\xs:attribute') t(n) Cross apply (values -- some fields are used multiple times, so we'll do it this way :) ( 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]) -- Let's look at the result Select * from dbo.[_FIAS]

More details on the queries:

The first one loads XSD schemas into a table on the server while providing each schema with an annotation in the field [table "" not found /]
– the name of the table into which I want to load data from the corresponding table.

Certainly, it could have been arranged so that every time the schemas changed, they could be downloaded, placed in some folder, and the structure of the target tables recreated automatically. However, since the structure changes very rarely—the last time was in 2016—it seems too lazy to set up such automation. It's better to spend 30 seconds on CTRL+C – CTRL+V.

Therefore, the loading into the tables with schemas is hardcoded, and the paths to the uploaded files as well as the names of the tables are manually specified.

The second query extracts information about the structure of the tables from the schemas. I didn't deal with 3NF, but unfolded it as a single table.

By the way, pay attention to this piece (+)

Beginners often ask: is it possible to calculate some complex expression in one query and then use it multiple times in different places? Yes, it is possible. For example:

from dbo.[_FIAS_SCHEMAS] a
	Cross apply a.x.nodes('\\xs:attribute') t(n)
	Cross apply 
			(values -- some fields are used multiple times, so we will do it this way :) 
			(
			 x.value('(xs:schema[1]\/xs:element[1]\/@name)', 'nvarchar(255)')
, ... here you can list all the complex fields to use them anywhere in the query
			)
			) tbl([root_name], [root_description], [name], [column], [required], [type], [len], [description])

It works with some limitations, of course. But once you start using it, you'll quickly understand what they are.

3. We will create scripts to generate FIAS tables, then run them to create the tables themselves:


Declare @schema sysname = N'dbo' Declare @sql nvarchar(max) -- Let's create the code for generating tables and execute it 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)

For those who are too lazy to do all this, the scripts for creating tables and annotated FIAS schemas will be attached at the end of the article.

The query for creating tables that resulted from the execution of the query

;

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. Since the xsd contains a proper description of the tables and their fields, we’ll use it and create a description of the structure in the extended properties of the tables and their fields:

-- Let's create an annotation for tables and fields
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)

Here is the code that resulted from the operation

;

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. We will modify the schemas themselves:

-- Definition of the link to the imported schema
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

-- Definition of the root attribute
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

-- Definition of the node that is a table row and its related table
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

-- Annotation of fields in the schema
-- Since only one node can be modified at a time, a cursor will be used
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. And finally, we will export the xsd schemas to disk for further use:

-- Export Schemas
-- Please note that the path to the exported schemas is hardcoded!
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)

That's it! :-)))

Here is the complete query that generates the tables, their descriptions, modifies the schemas, and exports them to disk:

USE [FIAS2]
go

if OBJECT_ID('dbo.[_FIAS]') is not null 
	drop table dbo.[_FIAS]
go

if OBJECT_ID('dbo._FIAS_SCHEMAS') is not null 
	drop table dbo.[_FIAS_SCHEMAS]
go

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

Create table dbo.[_FIAS_SCHEMAS] (x xml, [table “” not found "]
sysname) 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 ;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 -- some fields are used multiple times, so we will do it this way :) ( 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]) -- Let's look at the result Select * from dbo.[_FIAS] -- Let's create code for table creation and execute it 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) -- Let's create annotation for tables and fields 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) -- Defining a reference to the imported schema 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 -- Defining the root attribute 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 -- Defining the node that is a row of the table and its related table 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 -- Annotating fields in the schema -- Since we can only modify one node at a time, we will use a cursor 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; -- Exporting schemas -- Note that the path for exported schemas is hard-coded! 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)

Now we just need to call the loading procedure for each xml file with the corresponding schema (the unpacked files are stored in the folder e:tmp, and the schemas were exported to c:filesFIAS):

USE FIAS2
GO

Declare @sql nvarchar(max)

if OBJECT_ID('tempdb..#t') is not null
	drop table #t

Create table #t ([output] sysname NULL)

insert into #t
exec xp_cmdshell 'dir e:tmp /B'

;With load_data as
(
Select 
'_' + 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('' + Replace(Replace(Replace(Replace(a.[output],'DEL_', 'DEL$'), '_', ''), '.', ''), '$', '_') + '' as xml))) t(x) Where [output] like 'AS[_]%.xml' ) Select @sql = (Select 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)

Phew…

Well, now everything is finally done.

However, here's what I want to say to you, esteemed colleagues!
All of this works simply incredibly slowly!
I'm not talking about the creation of tables and schemas, of course. But about the loading.

In the test environment, the loading took nearly 5 hours (sic!!!). And this is without indexing the tables.

Meanwhile, the input-output system's loading was at 3 MB/s, and only a couple of cores were used.

The loading of address objects was at a speed of no more than 3 thousand records per second, and the loading of houses was at no more than 8 thousand per second. By the way, there are 60 million of them.
I can't tell you what this is related to—I will have to dig deeper into the code and, apparently, into the VM settings.

Note that the loading is performed in batches. It is assumed that clustered indexes will be created later based on their AOID.

Since they are GUIDs, it's better to do it this way because if clustered indexes are created BEFORE the loading, the resulting table will be fragmented by at least 50%. Plus, it's better to create indexes after loading because inserting into indexes makes loading even slower.

That is why my table names start with an underscore (_). It was planned that I would first load the data into them, then recreate the indexes of the target tables, and then calmly perform Alter table switch.

Also, please note that the data types for the FIAS table fields are not entirely optimal.
For example, the use of int where tinyint would suffice, or nvarchar in fields intended to store only numeric values, such as region codes or OKATO.
This is how it looks in the schemas :-(.

However, nothing stops you from digging into the metadata table, [dbo].[_FIAS], after creating it, and fine-tuning it before creating new loading schemes based on the corrected metadata.

Well, if eliminating such slow loading does not succeed, it seems that we will have to revert to the option of loading from dbf and finally dig through the corrupt data in the small dbfs. And write another article.

The dbf loaded normally in 8 threads in just over an hour, and another hour was spent merging individual tables into the target ones and building indexes on them.

… Or, finally, get your hands out of the... um... hyperbola, and make a proper data tier application, loading the data like all normal people do via SSIS.

But that's a completely different story.

→ Scripts and xsd schemas

Related links:

→ FIAS

The picture with the dog isn’t mine 🙂

Source: habr.com

Buy reliable website hosting with DDoS protection, VPS VDS servers 🔥 Buy reliable website hosting with DDoS protection, VPS VDS servers | ProHoster