T-SQL - 如果列存在,则执行涉及列的查询,否则执行另一个不存在列的查询

时间:2012-10-24 11:30:55

标签: tsql

  

可能重复:
  Invalid column name on sql server update after column create

我正在编写查询以从数千台计算机上存在的数据库中的表中提取数据。创建这些数据库的软件经历了大量的更改,因此较新的数据库可能有更新的表和/或更新的列,因此我希望编写一个SQL查询来检查表中是否存在列,如果存在,执行涉及该列的查询。如果不存在,则执行一个不包含该列的查询。

不幸的是到目前为止我发现的所有帖子中都有关于缺少列的处理,如果它不存在则要添加列。我不想这样做。我对数据库具有只读权限,并且不可能更改旧数据库。

这是我试过的一篇文章: How to check if a column exists in SQL Server table

考虑这个简单的查询(这不是我想要做的,但它应该清楚地说明):

    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列的较新数据库/表执行上述工作正常,但是当针对没有该列的数据库/表执行时,会出现以下错误:

  

Msg 207,Level 16,State 1,Line 5   列名称'SCID'无效。

在查询中是否可以做任何事情来解决这种情况,或者我是否需要在前端执行检查(可能会向数据库发送额外的查询以确定列是否存在或不存在并基于该执行适当的查询)?与此类似的问题也是整个表格的情况。如果表不存在,则根本不应执行查询。

0 个答案:

没有答案