Используя Профилировщика CLR от Microsoft http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en отличный способ определить, какие объекты содержат память, что поток выполнения приводит к созданию этих объектов и также контролю, который возражает живой где на "куче" (фрагментация, LOH, и т.д.).
Как определить, имеет ли данный столбец только значение NULL
:
SELECT 1 -- no GROUP BY therefore use a literal
FROM Locations
HAVING COUNT(a) = 0
AND COUNT(*) > 0;
Набор результатов будет состоять либо из нулевых строк (столбец a
имеет значение, отличное от NULL
) или одна строка (столбец a
имеет только значение NULL
). FWIW это стандартный код SQL-92.
После другой попытки я получил следующий метод расширения:
SQL больше касается работы с строками , а не с столбцами .
Если вы говорите об удалении строк, где c имеет значение null, используйте :
delete from table1 where c is null
Если вы говорите об удалении столбца, когда все строки для этого столбца имеют значение NULL, я бы просто нашел время, когда вы могли бы заблокировать БД от пользователей и выполнить одно из:
select c from table1 group by c
select distinct c from table1
select count(c) from table1 where c is not null
Затем, если вы только верни просто NULL (или 0 для последнего), творите свою магию (команда SQL Server может быть другой):
alter table table1 drop column c
Сделайте это для любых столбцов, которые хотите.
Вам действительно нужно будьте осторожны при удалении столбцов. Несмотря на то, что они могут быть заполнены нулями, могут быть SQL-запросы, которые используют этот столбец. Удаление столбца приведет к поломке этих запросов.
SELECT * FROM table1 WHERE c IS NOT NULL -- or also SELECT COUNT(*)
Чтобы определить, действительно ли этот столбец вообще не имеет значений.
ALTER TABLE table1 DROP COLUMN c
- это запрос на удаление столбца, если он считается желательным.