SQL Alter表默认错误

时间:2012-06-18 18:53:14

标签: sql sql-server-2008 tsql ddl

我正在尝试将现有表上的Integer字段从nullable修改为不可为空,并为其添加默认值。

    ALTER TABLE dbo.current_status  
ALTER COLUMN next_sign_id INT NOT NULL

此声明有效,但此声明不适用:

    ALTER TABLE dbo.current_performance_status  
ALTER COLUMN next_sign_tp_id INT NOT NULL DEFAULT(0)

这里有什么问题,如何在一个声明中实现这两个目标?我正在使用sql 2008。

1 个答案:

答案 0 :(得分:2)

你必须在三个语句中执行此操作(感谢@MartinSmith进行完整性检查,谁建议WITH VALUES在这种情况下不正确但仍然提醒我此表可能不为空):

ALTER TABLE dbo.current_performance_status 
  ADD CONSTRAINT df DEFAULT (0) FOR next_sign_id;

UPDATE dbo.current_performance_status 
 SET next_sign_id = 0
 WHERE next_sign_id IS NULL

ALTER TABLE dbo.current_performance_status
  ALTER COLUMN next_sign_id INT NOT NULL;