【发布时间】: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