Tsql 如何从Azure SQL数据库获取表描述
对于SQL Server,我可以使用以下方法从元数据中获取表描述:Tsql 如何从Azure SQL数据库获取表描述,tsql,azure,azure-sql-database,Tsql,Azure,Azure Sql Database,对于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
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”。Source=.Net SqlClient数据提供程序错误代码=-2146232060类=16
LineNumber=1 Number=208过程=”
服务器=tcp:odjidszumt.database.windows.net状态=1堆栈跟踪: 位于System.Data.SqlClient.SqlConnection.OneError(SqlException异常、布尔断开连接、Action
1 wrapCloseInAction)
位于System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
异常,布尔断开连接,操作
1 wrapCloseInAction)
位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject
stateObj、布尔调用方连接锁、布尔异步关闭)
在System.Data.SqlClient.TdsParser.TryRun(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject
stateObj、Boolean和dataReady)
位于System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()处
在System.Data.SqlClient.SqlDataReader.get_MetaData()处
在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,
运行行为运行行为,字符串重置选项字符串)
位于System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior、RunBehavior、Boolean returnStream、Boolean
异步、Int32超时、任务和任务、布尔异步写入、SqlDataReader
ds)
位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior、RunBehavior、布尔返回流、字符串
方法,TaskCompletionSource`1完成,Int32超时,任务和任务,
布尔异步(写)
位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior、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
连接,字符串选择)输入
c:\vso\Jenova\team\refactoring\Engine\DotNetEngine\Kailua\net\windward\utils\ado\SqlServer\WrSqlServerDatabase.cs:line
465例外情况:
我不知道Sql数据库的版本是什么-我们在Azure上创建了一个Sql数据库,没有做任何特殊的操作,所以我猜是最新版本。根据,sys正式发布。Azure Sql数据库不支持extended_properties视图。您提供的错误消息显示“无效的对象名称'sys.extended_properties'”,这证明它不受支持。
然而,奇怪的是,当我对Azure SQL数据库运行SSMS和SQL Server对象资源管理器的查询时,它工作正常。然后我返回门户,注意到我创建了一个V12 SQL Server,然后我尝试创建一个V2 SQL Server并对其运行查询,得到相同的结果“无效的对象名称'sys.extended_properties'”,请参见下面的快照:所以根据上面的测试,我认为只有Azure SQL Server V12数据库才支持“sys.extended_properties”。看来微软的官方文章可能不会更新到最新版本。我建议您检查您创建的Azure SQL数据库的版本:
您可以在创建SQL Server时启用V12,如下所示:
找到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'
-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用是不鼓励的,因为您的查询在Azure SQL中为我工作。您正在使用哪一服务器版本的Azure SQL?SQL用户有权查询主数据库吗?@Francois-抱歉,不知道数据库的版本。我们刚刚创建了一个Azure实例。所有其他元数据查询都起作用,因此我们确实可以访问主数据库。失败的只是表和列描述查询,它们都使用select中的sys.extended_属性。