Как обнаружить и удалить столбец, который содержит только нулевые значения?

Используя Профилировщика CLR от Microsoft http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en отличный способ определить, какие объекты содержат память, что поток выполнения приводит к созданию этих объектов и также контролю, который возражает живой где на "куче" (фрагментация, LOH, и т.д.).

6
задан Brian Tompsett - 汤莱恩 4 July 2015 в 13:10
поделиться

4 ответа

Как определить, имеет ли данный столбец только значение 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.

2
ответ дан 9 December 2019 в 22:36
поделиться

После другой попытки я получил следующий метод расширения:

5
ответ дан 9 December 2019 в 22:36
поделиться

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-запросы, которые используют этот столбец. Удаление столбца приведет к поломке этих запросов.

2
ответ дан 9 December 2019 в 22:36
поделиться
SELECT * FROM table1 WHERE c IS NOT NULL  -- or also SELECT COUNT(*)

Чтобы определить, действительно ли этот столбец вообще не имеет значений.

ALTER TABLE table1 DROP COLUMN c

- это запрос на удаление столбца, если он считается желательным.

1
ответ дан 9 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: