首页 > 解决方案 > SQL Server - 如果列不存在,则创建列

问题描述

我有一个示例表(#temp),例如:

Account    ABC      DEF     GHI     
-----------------------------------
A001       1000.00  NULL    NULL    
A002       NULL     500.00  800.00  
A003       NULL     700.00  NULL    
A004       1100.00  NULL    NULL    

标题 ABC、DEF、GHI 是枢轴的结果。我想:

select 
    *,
    case 
       when ABC is not NULL and JKL is not NULL 
          then 1 
          else 0 
    end as newColumn 
from 
    #temp

这会出错,因为JKL不存在。但是,它可以存在,并且必须在它存在时加以考虑。如何编辑我的查询语句以检查列 ABC 和 JKL 是否存在 > 如果它们不存在则 0 值 > 如果它们确实存在并且要么为空,则为 0 值 > 如果它们都不为空,则在 newColumn 中为 1 值.

标签: sql-server

解决方案


当您使用临时表时,这有点难看,但也许这样的事情会起作用:

IF NOT EXISTS (SELECT 1 
               FROM tempdb.sys.tables t
                    JOIN tempdb.sys.columns c ON t.object_id = c.object_id
               WHERE t.name LIKE N'#temp[_]%'
                 AND c.[name] = N'JKL')
    ALTER TABLE #Temp ADD JKL int;

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(13);
--Need dynamic SQL, as the batch will fail still otherwise
SET @SQL = N'SELECT *,' + @CRLF + 
           N'CASE WHEN ABC IS NOT NULL AND JKL IS NOT NULL THEN 1 ELSE 0 END AS newColumn' + @CRLF + 
           N'FROM #temp;'

EXEC sp_executesql @SQL;

如果JKL应该有一个非NULL值然后使用以下的ALTER

    ALTER TABLE #Temp ADD JKL int DEFAULT 0 WITH VALUES;

推荐阅读