加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如果列存在,则选择columnValue为空

发布时间:2020-12-12 16:12:18 所属栏目:MsSql教程 来源:网络整理
导读:我想知道如果列存在,我可以选择列的值,否则选择null.换句话说,我想“提升”select语句来处理该列不存在的情况. SELECT uniqueId,columnTwo,/*WHEN columnThree exists THEN columnThree ELSE NULL END*/ AS columnThreeFROM (subQuery) s 注意,我正在中间巩固
我想知道如果列存在,我可以选择列的值,否则选择null.换句话说,我想“提升”select语句来处理该列不存在的情况.
SELECT uniqueId,columnTwo,/*WHEN columnThree exists THEN columnThree ELSE NULL END*/ AS columnThree
FROM (subQuery) s

注意,我正在中间巩固我的数据模型和设计.我希望在接下来的几个星期内排除这个逻辑,但我真的很想超越这个问题,因为数据模型的修复比现在想要处理的时间要长一些.

另外请注意,我希望能够在一个查询中执行此操作.所以我不是在寻找一个答案

check what columns are on your sub query first. Then modify your
query to appropriately handle the columns on your sub query.

解决方法

您不能使用简单的SQL语句来执行此操作.除非表中的所有表和列引用都存在,否则SQL查询将无法编译.

如果“子查询”是表引用或视图,则可以使用动态SQL执行此操作.

在动态SQL中,您将执行以下操作:

declare @sql nvarchar(max) = '
SELECT uniqueId,'+
    (case when exists (select *
                       from INFORMATION_SCHEMA.COLUMNS 
                       where tablename = @TableName and
                             columnname = 'ColumnThree' -- and schema name too,if you like
                      )
          then 'ColumnThree'
          else 'NULL as ColumnThree'
     end) + '
FROM (select * from '+@SourceName+' s
';

exec sp_executesql @sql;

对于一个实际的子查询,您可以通过检查子查询是否返回与该列名称相关的内容来估计相同的事情.一种方法是运行查询:从(<子查询>)s中选择top 0 *到#temp,然后检查#temp中的列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读