我正在尝试在表格中创建新列。我想让它不可空。我不想使用默认约束。
我尝试了以下查询。但它失败了。
请在此纠正我或建议是否有更好的选择。
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'无效。
由于
答案 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);