我有一个包含以下列的表:F1,F2,... F10 其中一些列仅包含NULLS,我们说它们是F2和F7。 如何获得包含这些列名称的字符串,我想获得F2,F7和#39;作为回报值。 这是临时表和列名称以及列数未知。我需要一些非常通用的函数来提取包含NULL的列名
注意: 我知道在Oracle中使用一些系统对象(即all_tab_columns等)很容易,在SQL Server中也不确定。
谢谢。
答案 0 :(得分:3)
不确定为什么你需要这个,但是这样的事情可以帮助你
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)
答案 1 :(得分:1)
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。
答案 2 :(得分:0)
要列出数据库的“ 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'