2016-05-07 3 views
1

Для SQL Server, я могу получить описание таблиц из метаданных с помощью:Как я могу получить описание таблиц с Azure SQL Database

SELECT 
    OBJECT_SCHEMA_NAME(t.object_id) as SchemaName, 
    t.name AS TableName, 
    ex.value AS Description 
FROM 
    sys.tables AS t, 
    sys.extended_properties AS ex 
WHERE 
    ex.major_id = t.object_id 
    AND ex.minor_id = 0 
    AND ex.name = 'MS_Description' 
    AND ex.value IS NOT NULL 

Но что бросает исключение поражая базы данных Azure SQL. Как я могу извлечь его из базы данных Azure SQL?

Исключение я получаю:

System.Data.SqlClient.SqlException произошло HRESULT имя = -2146232060
Message = Invalid объект 'sys.extended_properties'. Источник = .Net SqlClient Data Provider ErrorCode = -2146232060 Класс = 16
LineNumber = 1 Number = 208 Процедура = ""
Server = TCP: odjidszumt.database.windows.net State = 1 StackTrace: в System.Data .SqlClient.SqlConnection.OnError (SqlException исключение, булева breakConnection, Действие 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) на System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, булева callerHasConnectionLock, булева asyncClose) на System.Data.SqlClient.TdsParser. TryRun (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject состояние Obj, булева & dataReady) на System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() в System.Data.SqlClient.SqlDataReader.get_MetaData() в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader DS, RunBehavior runBehavior , Строка resetOptionsString) на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, булева асинхронной, Int32 тайм-аут, задача & задачи, булева asyncWrite, SqlDataReader DS) на System.Data. SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Строка метод, TaskCompletionSource`1 завершение, Int32 тайм-аут, Задача & задача, Логическое asyncWrite) на System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, String метод) в системе. Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, метод String) на System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior поведение) на System.Data.Common.DbCommand.ExecuteReader() в net.windward. utils.ado.SqlServer.WrSqlServerDatabase.TableDesc (DbConnection conn, String select) в C: \ всо \ Jenova \ команда \ рефакторинга \ Engine \ DotNetEngine \ Kailua \ сетчатой ​​\ наветренной \ Utils \ \ SQLServer лишних слов \ WrSqlServerDatabase.cs: линия 465 InnerException:

Я понятия не имею, что версия База данных Sql - мы создали базу данных Sql на Azure и не делали ничего особенного, поэтому я предполагаю, что последнее.

+1

[Вредные привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –

+0

Ваш запрос работал на меня в Azure SQL. Какую версию сервера Azure SQL вы используете? Имеет ли пользователь SQL доступ к запросу базы данных Master? – Francois

+0

@Francois - извините, не знаю, какая версия БД. Мы просто создали экземпляр Azure. Все остальные запросы метаданных работают, поэтому у нас есть доступ к основной базе данных. Это всего лишь запросы описания таблиц и столбцов, которые используют sys.extended_properties в select, которые терпят неудачу. –

ответ

2

Официально, согласно this MSDN article, sys.extended_properties вид не поддерживается в базе данных Azure SQL. Сообщение об ошибке, которое вы указали, указано «Недопустимое имя объекта sys.extended_properties'», который доказал, что это не поддерживается. enter image description here

Однако странно то, что, когда я выполнить запрос из SSMS и SQL Server Explorer объектов с базой данных Azure SQL, она работает. Я затем вернуться портал и обратите внимание, что я создал V12 SQL Server, я тогда попытался создать V2 SQL Server и запустить запрос против него, получить тот же результат »Недопустимое имя объекта 'sys.extended_properties'", см. снимок снизу:
enter image description here

Как и в предыдущем тесте, я думаю, что sys.extended_properties поддерживается только в Azure SQL Server V12 dat стихать. Похоже, что официальная статья MS не может быть обновлена ​​до последней. Я предлагаю вам проверить, какая версия SQL Azure Database вы создали:
enter image description here

Вы можете включить V12 при создании SQL Server, как показано ниже:
enter image description here

0

Найдено лазури сист таблицы. Мне понадобилось решение для установки столбцов, требующих сравнения с регистром, в процессе meta driven etl. ПРИМЕЧАНИЕ. Возможно, вы захотите преобразовать поле d. [Value] в какую-то мета-модель.

/********************************* 
Returns Table Column Descriptions 
*********************************/ 
Select 
    s.[name] AS SchemaName 
    ,t.[name] AS TableName 
    ,c.[name] AS ColumnName 
    ,d.[value] AS Desription 
From sys.schemas AS s 
Inner Join sys.sysobjects AS t /* Tables*/ 
    On t.[uid] = s.[schema_id] 
Inner Join sys.syscolumns AS c 
    On c.id = t.id 
Inner Join sys.extended_properties AS d /*Column Description*/ 
    On d.major_id = t.id 
    And d.minor_id = c.colid 
Where d.[name] = 'MS_Description' 
Смежные вопросы