2015-05-20 40 views
4

我知道如何更改列的長度,但我的SQL語句失敗,因爲我試圖改變列是一個PK,所以我得到了以下錯誤:如何更改SQL Server中主鍵的列長度?

Msg 5074, Level 16, State 1, Line 1
The object 'PK_TableName' is dependent on column 'PersonID'.

是PersonID = PK。

我讀過What is the sql to change the field length of a table column in sql server,它只適用於非PK列。

我嘗試這樣做:

ALTER TABLE table_name 
ALTER COLUMN column_name <new datatype> 
+0

P.S.我不想刪除/重新創建表,因爲表中包含數百萬行... – LearnByReading

+0

我不認爲你有選擇... – Jeremy

+2

你不需要刪除表,但你需要在更改列之前刪除pk約束(並可能丟棄任何引用的FK約束),之後您可以重新創建 – NDJ

回答

12

見下面的示例例如如何增加主列

的大小

- 創建示例表

create table abc (id varchar(10) primary key) 

- 找到主要constratint在關鍵限制表中

select object_name(object_id),* from sys.key_constraints where object_name(parent_object_id) = 'abc' 

- 跌落約束

ALTER TABLE abc 
DROP CONSTRAINT PK__abc__3213E83F74EAC69B 

PK__abc__3213E83F74EAC69B替換,你覺得 在

sys.key_constraints

約束名稱 - 添加NOT NULL

ALTER TABLE abc alter column id varchar(20) NOT NULL; 

- 添加主鍵再次

ALTER TABLE abc 
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (id) 
+0

謝謝你的回覆。不知道爲什麼我的問題被拒絕。這樣,這個問題會一遍又一遍地出現,因爲消極問題不會出現在搜索中。 – LearnByReading

+0

Hi @LearnByReading如果這有幫助,然後接受答案。 –

+0

對不起!我忘了「接受」這個! – LearnByReading

2
ALTER TABLE <Table_Name> 
DROP CONSTRAINT <constraint_name> 

ALTER TABLE table_name 
ALTER COLUMN column_name datatype 

ALTER TABLE <Table_Name> 
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>) 
+0

謝謝你的回覆。不知道爲什麼我的問題被拒絕。這樣,這個問題會一遍又一遍地出現,因爲負面的問題不會出現在搜索結果中。 – LearnByReading

0

SQLServer的2008年並沒有讓我改變了數據的主鍵,所以我停用所有的約束,執行命令,然後重新啓動所有的約束。命令是:

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL" 

-- commands here 

EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"