Spis treści:

Kategoria:SQL Server


Zliczanie wartości null we wszystkich kolumnach tabeli

Dzisiaj zajmiemy się skryptem bardziej raportowym niż zwykle. Sam z siebie nie naprawia niczego, niczego nie tworzy. Daje nam jednak wiele informacji na temat użycia poszczególnych kolumn tabeli w bazie danych. Informacja taka posłuży nam do lepszego rozplanowania nowej tabeli, nowych indeksów na istniejącej tabeli. W jaki sposób? Oto skrypt:

DECLARE @tab nvarchar(128) = 'MojaTabela'
DECLARE @col nvarchar(128)
DECLARE @q nvarchar(256)
CREATE TABLE #result(
  ColName nvarchar(128),
  Nulls int,
  TotalRecords int
  ) 

DECLARE cur CURSOR FOR
SELECT C.name FROM sys.columns C
JOIN sys.tablesON C.[object_id]=T.[object_id]
WHERE T.name=@tab

OPEN cur
FETCH NEXT FROM cur INTO @col
WHILE @@FETCH_STATUS=0
BEGIN
  SET @q = 'INSERT INTO #result SELECT ''' + @col + ''', SUM((CASE WHEN '
    + @col + ' IS NULL THEN 1 ELSE 0 END )), COUNT(*) FROM ' + @tab
  EXEC sp_sqlexec @q
  FETCH NEXT FROM cur INTO @col
END
CLOSE cur
DEALLOCATE cur
INSERT INTO #result SELECT 'Sumarycznie'SUM(Nulls), SUM(TotalRecords) FROM #result
SELECT ColName, Nulls, TotalRecords-Nulls NotNull, TotalRecords,
CAST(100*(TotalRecords-Nulls)/TotalRecords AS nvarchar)+'%' [FillFactor]
FROM #result ORDER BY Nulls
DROP TABLE #result

Wynikiem działania powyższego skryptu będzie rezultat podobny do zaprezentowanego poniżej:

ColNameNullsNotNullTotalRecordsFillFactor
Kolumna10504916504916100%
Kolumna238799011692650491623%
Kolumna34056459927150491620%
Kolumna44177828713450491617%
Kolumna55047871295049160%
Sumarycznie1716204808376252458032%

W przypadku dużych i starych baz danych można natknąć się na pola, które nie są używane. Jeżeli tabela jest duża, a w pewnych kolumnie nic nie ma, wtedy warto się zastanowić nad tym, czy rzeczywiście ta kolumna jest nam potrzebna. Może jest to jakaś historyczna perełka, dawniej używana, a obecnie zapomniana? Jeżeli grupa kolumn przyjmuje wartości null jednocześnie, warto rozważyć przeniesienie ich do oddzielnej tabeli z relacją jeden do jednego. Takie statystyki często bardzo ładnie pokazują błędy w normalizacji tabel. Bez względu na zastosowanie, mam nadzieję, że skrypt się przyda.

Kategoria:SQL Server

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Kalkulator, jak kalkulator, na pewno nie uwzględnia wielu rzeczy. Dla przykładu, jedziemy po asfalcie, ja na rowerze trial (14 kg, opony 29x2,6) a obok mnie kolega na szosie. Robimy te same kilometry w tym samym czasie i niby tyle samo wysiłku włożyliśmy? Druga kwestia, idę na owym rowerze pojeździć po lesie, podjazd, zjazd, piasek etc. To nie to samo co jazda po ścieżce.
Całkiem niezły kalkulator, porównując rezultaty z suunto 9 baro wartości są niemal identyczne z tymże byłoby jeszcze lepiej gdyby dodać prędkość wiatru i przewyższenia. Zdecydowanie najlepszy kalkulator w necie.
Super wyjasnione, czytalo sie bardzo lekko. Dzieki i pozdrawiam
puściłem benta i leci klockiem w pomieszczeniu, w którym kodujemy