SQL Server中的任何列中都没有空值
我的表中有100多列,所有列都可以为空。我们需要找到哪个列中没有空值。这是在SQL Server中实现的SQL Server中的任何列中都没有空值,sql,sql-server-2008,Sql,Sql Server 2008,我的表中有100多列,所有列都可以为空。我们需要找到哪个列中没有空值。这是在SQL Server中实现的 运行此查询sp\u help Your\u Table,它将为您提供列名列表 打开Excel,将所有100个列名称粘贴到一列上,在B列上写入此代码: =“计数('A1&'”&A1&',” 然后将查询插入回SQL 用100列编写查询,如下所示 select count(ID) 'ID', ... count(Address) 'Address' from Your_Table 空值不会被计
sp\u help Your\u Table
,它将为您提供列名列表select
count(ID) 'ID',
...
count(Address) 'Address'
from Your_Table
SET NOCOUNT ON;
-- populate table
create table my_test_table
(
foo1 int,
foo2 int,
foo3 int,
foo4 int,
foo5 int
)
INSERT INTO my_test_table
select 1,2,3,4,5
INSERT INTO my_test_table
select 1,2,null,4,5
INSERT INTO my_test_table
select 1,2,3,4,null
INSERT INTO my_test_table
select 1,null,3,4,null
-- Actual query needed for question
declare @columns table
(
ident int identity(1,1),
column_name varchar(255)
)
INSERT INTO @columns (column_name)
SELECT c.[name]
FROM sys.columns c
INNER JOIN sys.objects o ON (c.object_id = o.object_id)
WHERE o.[name] = 'my_test_table'
ORDER BY c.column_id
declare @table_count int = (select COALESCE(count(ident),0) from @columns)
declare @counter int = 1
declare @column_name varchar(255)
declare @sql nvarchar(max) = ''
while (@table_count > 0 AND @counter <= @table_count)
BEGIN
select @column_name = column_name
from @columns
where ident = @counter
set @sql += ', count(' + @column_name + ') as [' + @column_name + '_total]'
set @counter += 1
END
exec('select count(*) as total' + @sql + ' from my_test_table')
如果列总计与总计(第一列)不匹配,则它有一些空值
测试:听起来像是一个可怕的DB设计。您可以更改它吗?从dbo中选择COUNT(*)、COUNT(col1)、COUNT(col2)、COUNT(col150)的可能重复项。您的表,并比较哪个结果小于
COUNT(*)
不是完全重复项,但您可以通过一些调整得到您想要的答案。
total | foo1_total |foo2_total |foo3_total |foo4_total |foo5_total
--------+-------------+--------------+-------------+-------------+-----------
4 | 4 | 3 | 3 | 4 | 2