sql-server - 在不使用架构的情况下测试 SQL Server 列是否存在?
问题描述
我们在 ADO.Net 中阅读的第 3 方数据库最近在其代码的新版本中添加了一列。这是一个新表的 fkey。
我们对数据表具有只读访问权限,因此理论上不能依赖模式来执行此操作。所以...
1) INFORMATION_SCHEMA 是否始终可用于您可以访问的项目,或者我们是否有可能甚至对我们可以读取的表都没有权限?
2)如果(1)是“坏的”,那么规范的解决方案是什么?在 SQL 本身中,我会做一个SELECT * FROM x WHERE 1=0
然后测试标头,.Net 中是否有等效的测试?
解决方案
您可以通过一点 XML 从任何表或查询中列出列名(值是可选的)。
例子
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
退货
Column_Name Column_Value
EmpID 1
EmpName Arul
Salary 100
Location
编辑
@MauryMarkowitz 提供了一个更好的解决方案(见下面的评论)
sp_describe_first_result_set @tsql = N'Select * from YourTable'
推荐阅读
- macos - 为什么 apache2 试图执行我的 CSS 和图像文件?
- python - 线程代理检查器很慢
- matlab - 如何在图像matlab之外查看文本
- python - 如何将 Pandas 中的单个时间序列转换为多个序列
- sql-server - 在 Azure Pipeline 中测试/编译 SQL 脚本
- sql - 如何在 MS-Access SQL 中插入长二进制字段
- tsibble - 如何在自动传递外部回归器列表的同时转换寓言中的变量?
- android - android清除屏幕上的任何对话框
- html - 引导行跨度对齐
- jmeter - Taurus junit-xml 报告不可见