2011-09-02 49 views
2

我有这样一个表:如何在SQL Server中摆脱NULL值的2008台

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呢?

+1

你的“修复”只是一个SELECT语句。为什么你会期望影响后续的查询?你不应该*更新你的桌子吗? –

+1

你想编辑表格内容吗?或只是由此产生的查询? – AJC

回答

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。这应该改变数据,以便所有的NULL值都变为-1。

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

1

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

现在这样说,你有三种选择:

1)更新表不允许在这些列空,然后设置默认为-1(或使用触发器)注:这需要管理员特权,您可能没有
2)总是用你的coalease或isnull()测试做一个选择
3)你可以对同一个表进行视图,然后在视图中选择做你的coalesce()或isnull()逻辑,然后你可以只需从视图中选择*,它会为您提供相同的表格,但空值已更改。

只是FYI,选项2或3有开销,所以只有在#1不是选项时才这样做。

+1

我喜欢每个其他评论与我为#1给出的相同建议,但是你只评价我的......?当它是一个有效的(而不是正确的)选项时,为什么会降低利率。当然,他可能没有DB管理员权限,但如果#1毕竟不是一个选项,我确实会说2或3。只是想明白... – ElementZero

+1

+1:同意。如果你打算投票,但不清楚为什么然后通过评论来澄清你的决定,所以我们都可以从中学习。答案在我看来实际上是非常好的(大多数情况下,需要修改权限才能更新,而不是管理员)。答案实际上也考虑了更广泛的问题,总是一件好事。 –