2015-11-02 1 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_nullable и is_nullable. Как граф ничего не в счет - вы могли бы вместо того, чтобы рассчитывать только там, где столбцы являются нулевым

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

Теперь, как сделать это для всех обнуляемых столбцов?

Я придумал это, но его виола медленно. Но опять же - как часто вам нужно это делать?

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;