【问题标题】:How can I get table descriptions from Azure SQL Database如何从 Azure SQL 数据库获取表描述
【发布时间】:2016-09-02 16:24:30
【问题描述】:

对于 SQL Server,我可以使用以下方法从元数据中获取表描述:

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
消息=无效的对象名称“sys.extended_properties”。来源=.Net SqlClient 数据提供程序错误代码=-2146232060 类=16
LineNumber=1 Number=208 过程=""
服务器=tcp:odjidszumt.database.windows.net 状态=1 StackTrace: 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader 数据流, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & 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、布尔返回流、字符串 方法,TaskCompletionSource`1 完成,Int32 超时,Task& 任务, 布尔异步写入) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法) 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法) 在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为) 在 System.Data.Common.DbCommand.ExecuteReader() 在 net.windward.utils.ado.SqlServer.WrSqlServerDatabase.TableDesc(DbConnection conn,字符串选择)在 c:\vso\Jenova\team\refactoring\Engine\DotNetEngine\Kailua\net\windward\utils\ado\SqlServer\WrSqlServerDatabase.cs:line 465 内部异常:

我不知道什么版本的 Sql 数据库 - 我们在 Azure 上创建了一个 Sql 数据库并且没有做任何特别的事情,所以我猜是最新的。

【问题讨论】:

  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它
  • 您的查询在 Azure SQL 中对我有用。您使用的是哪个服务器版本的 Azure SQL? SQL 用户是否有权查询主数据库?
  • @Francois - 抱歉不知道数据库的版本。我们刚刚创建了一个 Azure 实例。所有其他元数据查询都有效,因此我们确实可以访问主数据库。只是表和列描述查询,都在选择中使用 sys.extended_properties 失败。

标签: tsql azure azure-sql-database


【解决方案1】:

官方称,根据this MSDN article,Azure SQL 数据库不支持 sys.extended_properties 视图。您提供的错误消息显示“Invalid object name 'sys.extended_properties'”,证明它不受支持。

但是,奇怪的是,当我从 SSMS 和 SQL Server 对象资源管理器对 Azure SQL 数据库运行查询时,它可以工作。然后我回到门户并注意到我创建了一个 V12 SQL Server,然后我尝试创建一个 V2 SQL Server 并针对它运行查询,得到相同的结果“Invalid object name 'sys.extended_properties'",见下图:

所以根据上述测试,我认为“sys.extended_properties”仅在 Azure SQL Server V12 数据库中受支持。看来微软官方文章可能没有更新到最新。我建议您检查您创建的 Azure SQL 数据库的版本:

您可以在创建SQL Server时启用V12,如下所示:

【讨论】:

    【解决方案2】:

    找到 Azure sys 表。我需要一个解决方案来设置在元驱动 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多