我们在ADO.Net中阅读的第3方数据库最近在其代码的新版本中添加了一列。这是一张新桌子的钥匙。
我们对数据表具有只读访问权限,因此理论上不能依靠模式来执行此操作。所以...
1)INFORMATION_SCHEMA 总是可用于您可以访问的项目,或者即使我们可以读取的表也可能没有权限吗?
2)如果(1)是“坏的”,那么规范的解决方案是什么?在SQL本身中,我将执行SELECT * FROM x WHERE 1=0
然后测试标题,.Net中是否有等效的测试?
答案 0 :(得分:3)
您可以通过一点XML列出任何表或查询中的列名(值是可选的)。
示例
stdout.txt
返回
Declare @AnyTableOrQuery Table (EmpID int,EmpName varchar(50),Salary int,Location varchar(100))
Insert Into @AnyTableOrQuery Values
(1,'Arul',100,null)
,(2,'Jane',120,'New York')
Select B.*
From ( values (cast((Select Top 1 * From @AnyTableOrQuery for XML RAW,ELEMENTS XSINIL) as xml))) A(XMLData)
Cross Apply (
Select Column_Name = a.value('local-name(.)','varchar(100)')
,Column_Value = a.value('.','varchar(max)')
From A.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./*') as C2(a)
) B
编辑
@MauryMarkowitz提供了更好的解决方案(请参见下面的评论)
Column_Name Column_Value
EmpID 1
EmpName Arul
Salary 100
Location