Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 如何从Azure SQL数据库获取表描述_Tsql_Azure_Azure Sql Database - Fatal编程技术网

Tsql 如何从Azure SQL数据库获取表描述

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

对于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”。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_属性。