可能重复:
列创建后 sql server 更新上的列名无效
我正在编写查询以从数千台机器上存在的数据库中的表中提取数据。创建这些数据库的软件经历了很多变化,因此较新的数据库可能有较新的表和/或较新的列,所以我希望编写一个 SQL 查询来检查表中是否存在列,如果存在,执行涉及该列的查询。如果不存在,则执行忽略该列的查询。
不幸的是,到目前为止,我遇到的所有与缺少列有关的帖子都希望添加该列(如果它不存在)。我不想那样做。我对数据库具有只读访问权限,并且不可能更改旧数据库。
这是我尝试过的一篇文章: 如何检查 SQL Server 表中是否存在列
考虑这个简单的查询(这不完全是我想要做的,但它应该让事情变得清晰):
IF COL_LENGTH('E_BU','SCID') IS NOT NULL
BEGIN
SELECT BUID, SCID
FROM E_BU
END
ELSE
BEGIN
SELECT BUID
FROM E_BU
END
如果针对具有 SCID 列的较新数据库/表执行上述操作,则效果很好,但是当针对没有该列的数据库/表执行时,会出现以下错误:
消息 207,级别 16,状态 1,第 5 行无效的列名称“SCID”。
在查询中是否可以做任何事情来解决这种情况,或者我需要在前端本身执行检查(可能向数据库发送一个额外的查询以确定该列是否存在或不存在,并且基于执行适当的查询)?与此类似的问题也会出现在整个表的情况下。如果表不存在,则根本不应该执行查询。