2009-01-20 59 views
33

爲什麼SQL 2008突然想要在我將列類型從say int更改爲real時丟棄我的表?就我所知,這在SQL 2005中從未發生過。任何見解都會有幫助。如何更改列而不刪除SQL 2008中的表

+0

在SF這個答案回答得當 [http://stackoverflow.com/a/11035353/1711106][1] [1]:http://stackoverflow.com/a/11035353/1711106 – 2013-12-12 09:12:00

回答

32

在SQL Server 2008中,轉至工具>>選項。在小窗口中,點擊「設計師」。取消選中「阻止保存需要改變......」

=====

編輯在9月4日,2015年

我已經很長,很久以前這裏加入這個答案描述我將如何解決上述問題中描述的情況。從那時起,以下線程中的用戶就按照我當時推薦的方式提出了一些關於處理事務的問題。基本上,我描述的解決方案在某些情況下可能會有問題。然後,我建議您繼續閱讀以檢查其他用戶的評論併爲您選擇最佳解決方案。

+0

我已經找到答案,但感謝您的幫助。 – Middletone 2009-01-20 06:36:54

+6

但它會丟掉桌子!這不是一個超大型表格的功能方式 – 2013-08-21 11:19:46

38

我不敢相信頂尖的答案一直在這裏坐這麼久 - 這是非常危險的建議!

有幾個操作就可以就地做到不放棄你的表:

如果您發現自己處於無法刪除表的情況下更改列的情況,您通常可以使用SELECT INTO查詢將您的數據投影到新表中,然後刪除舊錶(暫時禁用約束),然後重命名投影表。但是,在這種情況下,您需要將數據庫脫機進行維護。

0

我有同樣的問題。雖然我的帳戶有權利,如果我嘗試使用另一個sa帳戶它的作品。看來,我的賬戶不知怎麼改變了。仍在調查,但這是一個許可問題。

更新:

我無法展開它。但這就是我所做的。我的帳戶屬於兩個域組。一個是新的AD域組,另一個是NT域名組。一旦我刪除了舊域組,我就可以成功修改表。請注意,這兩個團體都有「特權」。

行爲是更改命令會導致成功,但沒有更改表上。然後,當我手動嘗試通過設計器更改字段時,它抱怨說,如果需要刪除並重新創建表格,我不允許進行更改。我發現了工具中的設置,我可以關閉它。但是這張桌子很大,不是一個好主意。我會告訴別人反對它。

所以這是一個權限問題。我無法解釋怎麼樣,但是我希望它可以幫助別人

24

這裏是我使用:

-- Add new column 
ALTER TABLE MyTable 
ADD Description2 VARCHAR(MAX) 
GO 

-- Copy data to new column (probably with modifications) 
Update MyTable 
SET Description2 = Description 
GO 

-- Drop old column 
ALTER TABLE MyTable 
DROP COLUMN Description 
GO 

-- Rename new column to the original column's name. 
sp_RENAME 'MyTable.Description2' , 'Description', 'COLUMN' 
GO 
  1. 將數據複製到一個新列。
  2. 丟棄舊列。
  3. 將新列重命名爲舊列的名稱。
0

另一種方式來這不完全刪除表是

  1. 將列值的備份。
  2. 如果列尚未允許空值,可將列設爲空。設置列值由 爲空做

    update tablename set columnname = null 
    
  3. 刪除列
  4. 插入使用相同的名稱與已刪除列,要
  5. 插入保存數據到這個類型的新列列
相關問題