Как избавиться от значений NULL в таблице SQL Server 2008 - PullRequest
2 голосов
/ 02 сентября 2011

У меня есть таблица как:

1   0.22    0.14    0.05
23  11      0.32    0.16
4   NULL    1       0.39
NULL NULL   .8      1
NULL .5     .7      NULL 

Я хочу изменить таблицу, чтобы она стала

1   0.22  0.14  0.05
23   1    0.32  0.16
4   -1      1   0.39
-1  -1     .8     1
-1  .5     .7    -1

Если вы посмотрите, я изменил NULL на -1

Я пытался:

SELECT
  coalesce([a1], -1), coalesce([a2], -1),coalesce([a3], -1), coalesce([a4], -1)
FROM tableee;

Что правильно, но когда я делаю SELECT *, я получаю таблицу со значениями null ...

Как мне изменить таблицу, чтобы при SELECT * я не получал NULL, а -1 вместо этого?

Ответы [ 3 ]

7 голосов
/ 02 сентября 2011

Если вы хотите изменить значения в таблице, вам нужно обновить таблицу:

UPDATE Tableeee t
SET t.a1 = COALESCE(t.a1,-1),
    t.a2 = COALESCE(t.a2,-1),
    t.a3 = COALESCE(t.a3,-1)
    t.a4 = COALESCE(t.a4,-1)

Или вы можете изменить столбцы, чтобы они не обнулялись и дали значение по умолчанию -1.Возможно, вы захотите сделать это, если у вас есть это требование.Обновление данных будет просто бандой, вам нужно применить это требование в БД.

1 голос
/ 02 сентября 2011

Нет способа изменить таблицу так, чтобы вы получали -1 вместо нуля с помощью выбора *. Вы разрешаете пустые значения для этих столбцов, поэтому нежелательно, чтобы логика скрывала пустые значения.

Теперь, как говорится, у вас есть три варианта:

1) Обновите таблицу, чтобы в этих столбцах не было пустых значений, а затем установите значение по умолчанию -1 (или используйте триггер). примечание: для этого требуются права администратора, которых у вас может не быть .
2) Всегда делайте выбор с помощью coalease или isnull ().
3) Вы можете сделать вид на ту же таблицу, а затем в представлении выбрать сделать вашу логику coalesce () или isnull (), тогда вы можете просто выбрать * в представлении, и это даст вам ту же таблицу, но с нулевым изменилось.

Только к вашему сведению, опция 2 или 3 имеет накладные расходы, поэтому делайте это только в том случае, если # 1 не опция.

1 голос
/ 02 сентября 2011

Вы можете изменить схему таблицы, чтобы столбцы не обнулялись и имели значение по умолчанию -1. Это должно изменить данные так, чтобы все значения NULL стали -1.

Если вы не хотите фактически изменять данные, а только набор данных, возвращаемый запросом, рассмотрите возможность создания представления на основе вашего запроса COALESCE(). Затем вы можете использовать это представление всякий раз, когда хотите увидеть -1 вместо NULL.

...