2016-08-30 46 views
-1

我想將非空約束添加到表中的現有列中。在完成一些合併數據的操作之後。我想修改表格來添加不爲null的約束。但是,我確實需要首先驗證是否存在NotNULL約束,否則在運行腳本的後續操作上。該文件會拋出錯誤。那麼應該怎麼樣。更改sqlserver表列以添加'Not NULL'約束

我想嘗試類似:

IF NOT EXISTs (Select.. ) 

BEGIN 

ALTER table .... 

END 
+0

http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint-exists-in-sql-server –

+0

這個問題是不是解決了嗎?你需要進一步的幫助嗎?請允許我提示一個提示:如果這個問題已經解決,那麼在(最佳)答案的投票櫃檯下面勾選驗收檢查將會非常友善。這將1)標記這個問題已解決2)使追隨者更容易找到最佳的解決方案3)支付點給回答者和4)支付點給你。既然你已經跨越了15分的邊界,你還需要額外的投票。這是SO的方式來說聲謝謝。快樂編碼! – Shnugo

回答

0

也許我沒有正確地理解這一點,但沒有必要檢查所有腦幹。如果你喜歡,你可以反覆修改一個表的列到NOT NULL

試試這個:

CREATE TABLE Test(ID INT,SomeValue VARCHAR(100)); 
INSERT INTO Test VALUES(1,NULL),(2,'Value 2'),(NULL,'Value NULL'); 

--Ups,ID不應該是NULL,但這將引發一個錯誤

--ALTER TABLE Test ALTER COLUMN ID INT NOT NULL; 

- 第一個已糾正缺失值

UPDATE Test SET ID=3 WHERE SomeValue='Value NULL'; 

- 現在這個作品

ALTER TABLE Test ALTER COLUMN ID INT NOT NULL; 

- 再次聲明此語句沒有問題。無需檢查所有腦幹...

ALTER TABLE Test ALTER COLUMN ID INT NOT NULL; 

--clean-最多

GO 
DROP TABLE Test; 
0

可以使用視圖中sys命名空間用於此目的。像這樣的東西。

select c.name,t.name,c.is_nullable 
from sys.all_columns c 
inner join sys.tables t on c.object_id=t.object_id 
where t.name = 'MyTable' and c.name = 'myCol'; 

然後alter table ... alter column...