创建一个sql列更新

问题描述:

我试图在表中创建一个新的列。我想让它不可空。我不想使用默认约束。创建一个sql列更新

我试过以下查询。但它失败了。

请在这里改正我或建议您是否有更好的选择。

ALTER TABLE [dbo].[UCBCluster] 
ADD PBXClusterId INT NULL; 

UPDATE [dbo].[UCBCluster] 
SET PBXClusterId = 0 
WHERE PBXClusterId IS NULL; 

ALTER TABLE [dbo].[UCBCluster] 
ALTER COLUMN PBXClusterId INT NOT NULL; 

错误:

Msg 207, Level 16, State 1, Line 5
Invalid column name 'PBXClusterId'.

感谢

+0

我试过用sqlfiddle,你的查询工作正常。哪一行是第5行? – Jens 2015-03-03 06:39:29

哟必须保持默认costraint那么只有您可以更改为NOT NULL

ALTER TABLE [dbo].[UCBCluster] 
add constraint cnt_column Default '' for PBXClusterId 

ALTER TABLE tb_TableName 
ALTER COLUMN PBXClusterId int NOT NULL 
+0

我不想去默认约束。我想把它作为一个必填字段。 – Raghav 2015-03-03 06:36:30

ALTER TABLE [dbo].[UCBCluster] ADD PBXClusterId INT NOT NULL Default '0'; 
+0

我不想去默认约束。我想把它作为一个必填字段。 – Raghav 2015-03-03 06:36:34

您可以使用检查约束

I wanted to make it a mandatory field

ALTER TABLE [dbo].[UCBCluster] ALTER COLUMN 
PBXClusterId INT CHECK (PBXClusterId IS NOT NULL); 

不能在单个批处理中运行所有这一切,因为SQL Server将在执行开始分析它,并在那个时候,没有PBXClusterId列还不存在。

您需要在三个不同批次运行这一点 - 无论是只强调它在Management Studio,或者如果你想运行它作为一个,你需要把你的步骤之间GO分隔符:

ALTER TABLE [dbo].[UCBCluster] 
ADD PBXClusterId INT NULL; 
GO; 

UPDATE [dbo].[UCBCluster] 
SET PBXClusterId = 0 
WHERE PBXClusterId IS NULL; 
GO; 

ALTER TABLE [dbo].[UCBCluster] 
ALTER COLUMN PBXClusterId INT NOT NULL; 
GO; 

在同一批SQL语句中运行DDL语句(数据定义语言 - 语句修改数据库结构)和DML语句(数据操作语言 - 添加或更新数据)通常不是一个好主意SQL Server