2015-11-02 64 views
0

我想確定SQL Server 2008數據庫中的兩件事情。獲取SQL Server 2008中的列狀態

首先,我需要知道列中有空值的列。

其次,我需要知道實際表中每列的空值計數。

我知道我可以做得到的第一個:

SELECT t.name, c.name 
FROM sys.tables t 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE c.is_nullable = 1 

我很努力,雖然找到的第二部分。

回答

0

假設您有一張表atable,其中列not_nullableis_nullable。由於計數不計算任何東西 - 你可以改爲只計算列的空位

SELECT count(*) count_nulls FROM atable WHERE is_nullable is null; 

現在如何做到這一點所有可空列?

我想出了這個 - 但它的veeery緩慢。但是,再次 - 你多久需要這樣做?

create table #nullcolumns(nullable_column varchar(255), count_nulls int); 

declare @sqladd nvarchar(1000); 

DECLARE users_cursor CURSOR FOR 
SELECT /* TOP 20 */ 'INSERT INTO #nullcolumns SELECT '''+ 
t.name+'.'+c.name+''' as nullable_column, count(*) from ' 
     +t.name+' WHERE '+c.name+' IS NULL ' 
FROM sys.tables t 
INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE c.is_nullable = 1 

OPEN users_cursor 
FETCH NEXT FROM users_cursor 
INTO @sqladd 

WHILE @@FETCH_STATUS = 0 
BEGIN 

exec sp_executesql @sqladd; 
print @sqladd; 


FETCH NEXT FROM users_cursor 
INTO @sqladd 

END 
CLOSE users_cursor 
DEALLOCATE users_cursor 

SELECT * FROM #nullcolumns;