创建一个更新它的SQL列

时间:2015-03-03 06:32:04

标签: sql sql-server-2008

我正在尝试在表格中创建新列。我想让它不可空。我不想使用默认约束。

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

请在此纠正我或建议是否有更好的选择。

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
  列名称'PBXClusterId'无效。

由于

4 个答案:

答案 0 :(得分:1)

您不能在一个批处理中运行所有这些,因为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;

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你必须保持默认约束,然后才能改为非空

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

ALTER TABLE tb_TableName
ALTER COLUMN PBXClusterId int NOT NULL

答案 3 :(得分:0)

您可以使用检查约束

  

我想将其作为必填字段

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