2010-03-12 52 views
11

我不知道是否有辦法迫使MSSQL Management Studio來產生這樣的腳本:強制Management Studio中使用ALTER TABLE而不是DROP/CREATE

ALTER TABLE Mytable 
ADD MyCol bit NOT NULL 
CONSTRAINT MyColDefault 
DEFAULT 0 WITH VALUES 


ALTER TABLE [dbo].Mytable 
ALTER COLUMN MyCol2 int NULL 

GO 

當我改變一個非常簡單的屬性在桌子上的一列。 如果我在設計器中執行此操作並詢問生成的腳本,腳本不會執行如此簡單的任務,而是將所有數據複製到tmp表中,刪除原始表,使用原始表名重命名tmp表。而且,當然,下降並重新創建每一個約束和關係。

有什麼辦法可以改變這種行爲嗎?或者,這可能是可能的,在使用上面簡單的ALTER TABLE時沒有看到有什麼危險嗎?

謝謝。

+0

有沒有辦法做到這一點馬可? – AnotherDeveloper 2015-09-10 15:26:46

回答

5

你不能改變行爲,只是它創建的默認腳本並不總是最有效的。它創建的腳本格式爲:知道可以工作,但結果通常很慢並且資源很大。我建議您習慣於自己創建用於所有更改的腳本,因爲您可以更好地優化它。您創建的內容沒有任何問題(假設您沒有對MyCol2的現有約束/依賴關係,它將被無效的int變爲無效)

7

是的,您可以!

在SQL Server Management Studio中,進入問題表的表設計模式,並進行更改。但是:不是單擊「保存」按鈕,而是在表設計視圖中右鍵單擊,在上下文菜單的末尾應該有一個「生成更改腳本」項目。

alt text http://i40.tinypic.com/33e7ite.png

點擊該菜單項,然後你會得到呈現其中包含要做到這一點,你在設計表中做出這些改變所需要的T-SQL腳本彈出一個對話框。複製或保存該T-SQL代碼,並取消設計者,瞧 - 你有你的改變腳本!

更新: Marco,對不起,我不認爲有任何改變默認行爲的選項,至少不是現在。您可能希望向Microsoft提交一份有關Microsoft Connect的增強請求來提出這個建議 - 我認爲這是個好主意!

+1

嗨馬克,對不起,也許我沒有說清楚。我知道這一點,這就是我已經知道SQLMS以這種方式做事的方式。 我想知道是否有任何方法來模塊化它的默認行爲。你提出的建議對於稍後使用這個腳本是有用的,事實上這正是我想要做的。太糟糕了,這裏生成的腳本很麻煩,而且在我的小見解中通常情況下不是資源高效的。 再見! – marco 2010-03-12 13:46:04

-1

簡單!只需轉到ToolOption,然後選擇Designer節點並選擇Table and Database designer,以便您可以取消選中Prevent saving changes that require ...複選框。

現在你可以在你的桌子上設計任何chage!

+3

這會給你一個錯誤,而不是保存你的更改 - 它不會讓設計器用戶ALTER TABLE。 – 2011-12-28 21:48:41