如何摆脱SQL Server 2008表中的NULL值

时间:2011-09-02 18:17:27

标签: sql sql-server sql-server-2008 null

我有一张表:

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 个答案:

答案 0 :(得分:7)

如果要更改表格中的值,则需要更新表格:

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 :(得分:1)

您可以更改表架构,以使列不可为空,并且默认值为-1。这应该改变数据,以便所有NULL值变为-1。

如果您不想实际更改数据而只想更改查询返回的数据集,请考虑根据COALESCE()查询创建视图。然后,只要您想要看到-1代替NULL,就可以使用该视图。

答案 2 :(得分:1)

没有办法实际修改表,因此使用select *得到-1而不是null。您允许这些列使用空值,因此隐藏空值不是理想的逻辑。

现在说,你有三个选择:

1)将表更新为不允许这些列中的空值,然后将默认值设置为-1(或使用触发器)注意:这需要管理员权限,您可能没有。<登记/> 2)总是用你的coalease或isnull()测试进行选择 3)你可以查看同一个表,然后在视图中选择你的coalesce()或isnull()逻辑,然后你可以从视图中选择*,它会给你相同的表,但是null改变了。

仅供参考,选项2或3有开销,所以只有当#1不是选项时才这样做。