2010-04-23 116 views
38

是否可以將SQL Server 2008數據庫中的列類型從varchar(255)更改爲varchar(MAX)而不必刪除表並重新創建?Varchar(255)到Varchar(MAX)

SQL Server Management Studio每次嘗試使用它時都會引發錯誤 - 但爲了節省自己的頭痛,我很高興知道是否可以在不需要DROP和CREATE的情況下更改此類型。

感謝

+2

奇怪,在SQL Server 2005中試用過,對我來說工作正常。 – anonymous 2010-04-23 03:22:10

+2

順便說一句,錯誤是什麼引發的? – anonymous 2010-04-23 03:29:20

+1

'不允許保存更改。您所做的更改需要刪除並重新創建以下表格。您要麼對無法重新創建的表格進行更改,要麼已啓用「禁止保存需要重新創建表格的更改」選項。 選項'禁止保存更改'未啓用... – Darbio 2010-04-23 03:34:24

回答

66

您應該可以使用T-SQL來做到這一點。

喜歡的東西

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 
+0

這工作。感謝 – Darbio 2010-04-23 03:55:42

+0

對我來說也幫了我...謝謝 – 2015-07-03 11:38:07

11

「保存更改是不允許的。您所做的更改要求 需要刪除以下表格, 重新創建。您已對 重新創建或啓用選項012xx的表進行了 更改。防止保存需要重新創建 表的更改。選項 「防止保存更改」未啓用 ..

這是在SQL Server Management Studio 2008中的默認情況下是開啓一個新的「功能」。每當你做出更大的改變時,SSMS只能通過創建一個新表來重新創建表,然後移動舊錶中的數據 - 所有這些都在後臺(這些更改包括重新排列列以及其他內容)。

這個選項默認是關閉的,因爲如果你的表有FK約束和東西,這種重做表的方式可能會失敗。但是你絕對可以開啓這個功能!

alt text http://i42.tinypic.com/19pegj.png

這是Tools > Options下,一旦取消選中該選項,您可以再次做這幾樣在表設計更改表結構。

+0

謝謝marc_s。我已經取消了這個選項,但仍然阻止我進行更改。當我自己寫他們的時候,上面的旁觀者的alter語句就起作用了。謝謝:) – Darbio 2010-04-23 06:54:13

+0

@JD:嗯......奇怪......通常這是問題 - 很高興你已經有了解決方案,不過! – 2010-04-23 11:56:40

1

注意
喜歡的東西

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

馬丁·史密斯的answare:

如果你正在增加它varchar(100 - 8000)(即比varchar(max))其他任何東西,你這樣做通過TSQL而不是SSMS GUI

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
而不是將列的可空性從 NULLNOT NULL(在某些情況下,這將鎖定表,同時對所有行進行驗證,並可能將其寫入或從 NOT NULL更改爲 NULL,然後這是一個快速元數據更改。它可能需要等待表上的 SCH-M鎖,但一旦獲得該更改將非常即時。 需要注意的一點是,在等待 SCH-M鎖定期間,其他查詢將被阻止,而不是先跳過隊列,因此您可能首先考慮添加 SET LOCK_TIMEOUT。 還要確保在 ALTER TABLE語句中明確指定 NOT NULL如果這是原始列​​狀態,否則該列將更改爲允許 NULL

+0

這與[現有的答案](http://stackoverflow.com/a/2696003/1402846)是否相同? – Pang 2015-11-26 00:55:07

+1

爲什麼問題是ALTER varchar(MAX)? – Chris 2016-09-06 22:54:56