从整个表中获取NULL

时间:2011-12-21 23:39:50

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

我有一个SQL Server表,我正在构建超过100列。我正在运行UPDATE TABLE_NAME个查询来填充该表。但是,如果没有可用记录,则会在记录中插入NULL。这使我必须执行的计算变得困难。

我尝试在NOT NULL语句中使用DEFAULT (0)CREATE TABLE创建表,但是当我运行更新时,它会尝试插入NULL值并收到此错误:< / p>

更新声明:

UPDATE TABLE_NAME
SET NumOrders = (SELECT count(OrderID) FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID);

Cannot insert the value NULL into column 'NumOrders', table 'TABLE_NAME'; column does not allow nulls. UPDATE fails.

我可以运行第二次更新查询来删除NULLS,例如:

UPDATE TABLE_NAME
SET NumOrders = 0
WHERE NumOrders IS NULL;

这似乎是我对我必须编写的更新查询加倍。

必须有更好的方法来做到这一点,对吧....?

由于

3 个答案:

答案 0 :(得分:3)

UPDATE TABLE_NAME
SET NumOrders = isnull((SELECT count(OrderID) FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID),0);

这对你有用吗?

答案 1 :(得分:1)

默认约束仅触发插入而不更新,另一个选项是使用更新触发器将NULLS更改为非空的

或指定update语句中的值,并确保它不是null,而是实际值

答案 2 :(得分:0)

UPDATE TABLE_NAME SET NumOrders = COALESCE((SELECT count(OrderID)FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID),0);