繁体   English   中英

从 SQL Server 表中获取所有非 NULL 列名

[英]Get all not NULL column names from a SQL Server table

我有一个包含以下列的表:F1、F2、...F10 其中一些列仅包含 NULL,假设它们是 F2 和 F7。 如何获取包含这些列名称的字符串,我想将 'F2,F7' 作为返回值。 这是一个临时表和列名,列数未知。 我需要一些非常通用的函数来提取包含 NULL 的列名

注意:我知道在 Oracle 中使用一些系统对象(即 all_tab_columns 等)很容易,但不确定在 SQL Server 中是否也可能。

谢谢。

不知道你为什么需要这个,但像这样的东西应该对你有帮助

Select CASE WHEN Len(res) > 0 THEN LEFT(res, Len(res) - 1) ELSE '' END AS result
From 
(
select case when Count(F1)= 0 then 'F1,' else '' End +
       case when Count(F2)= 0 then 'F2,' else '' End +
       case when Count(F3)= 0 then 'F3,' else '' End +
            .....
       case when Count(F10)= 0 then 'F10,' else '' End 
       End as res
From yourtable
) A

这是适用于未知列名的动态方法

DECLARE @sql VARCHAR(max) =''

SET @sql = ' Select CASE WHEN Len(res) > 0 THEN LEFT(res, Len(res) - 1) ELSE '''' END AS result
From 
(
select'
SET @sql += (SELECT ' case when Count(' + COLUMN_NAME + ')= 0 then ''' + COLUMN_NAME + ','' else '''' End+'
             FROM   INFORMATION_SCHEMA.COLUMNS
             WHERE  table_name = 'TableA'
             FOR xml path (''))
SET @sql = LEFT(@sql, Len(@sql) - 1)
SET @sql += ' From yourtable ) A (res)'

--SELECT @sql
EXEC (@sql) 

列出数据库中“dbo.Employee”表中的所有不可为空的列,请运行以下查询:

SELECT TABLE_CATALOG AS Database_Name, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'Employee'
AND IS_NULLABLE = 'NO'
SELECT t.name, c.name, c.is_nullable 
FROM sys.tables t 
JOIN sys.columns c on t.object_id = c.object_id
WHERE t.name = 'YourTableNameHere'
  AND c.is_nullable = 0

如果您使用 MS SQL Server 并试图避免 INFORMATION_SCHEMA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM