2015-03-03 85 views
1

我試圖在表中創建一個新的列。我想讓它不可空。我不想使用默認約束。創建一個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

回答

0

喲必須保持默認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

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

我不想去默認約束。我想把它作爲一個必填字段。 – Raghav 2015-03-03 06:36:34

0

您可以使用檢查約束

I wanted to make it a mandatory field

ALTER TABLE [dbo].[UCBCluster] ALTER COLUMN 
PBXClusterId INT CHECK (PBXClusterId IS NOT NULL); 
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; 

在同一批SQL語句中運行DDL語句(數據定義語言 - 語句修改數據庫結構)和DML語句(數據操作語言 - 添加或更新數據)通常不是一個好主意SQL Server