新表已添加到表中,但新列未添加到表定義(最右邊一列)的末尾,而是添加到表的中間。數據丟失警告在表中間添加列
當我嘗試在展鵬SQL源控制犯,我得到了警告,「這些變化可能會導致數據丟失」
- 威爾數據丟失真的occurr?
- 有沒有辦法預覽更改腳本以確認沒有數據會丟失?
- 我可以複製腳本,輕鬆地把它變成一個遷移V2腳本?
- 請問我只是
- 編輯在SSMS表並移到新列到最後
- 或寫遷移腳本?
- 如果是這樣,有沒有方便的工具做重複的東西?
新表已添加到表中,但新列未添加到表定義(最右邊一列)的末尾,而是添加到表的中間。數據丟失警告在表中間添加列
當我嘗試在展鵬SQL源控制犯,我得到了警告,「這些變化可能會導致數據丟失」
鋒線上披露,我對SQL源代碼控制紅門工作。
該更改將需要重新創建表。默認情況下,SSMS不會讓您保存該更改。但是,該選項必須已在SSMS中禁用。它位於工具 - >選項 - >設計器 - >表格和數據庫設計器 - >防止保存需要重新創建表格的更改。
鑑於功能則禁用SQL源控制回升,截至作爲一個潛在的數據丟失的情況,並提示是否要添加一個遷移腳本。
如果你的團隊中的其他開發人員通過獲得最新的拉這種變化,那麼SQL源代碼控制將讓他們瞭解更多的細節的任何潛在的數據丟失,這取決於它們的本地數據庫的當前狀態。如果唯一的變化是將列添加到現有的表中,那麼這不會將數據放在未更改的列中。
如果您正在部署到另一個數據庫(例如staging/UAT/prod),並且您有SQL Compare,那麼您可以使用它來準確查看將應用於數據庫的內容,如果嘗試在另一個非本地數據庫。選擇創建部署腳本選項,您可以在運行前仔細檢查SQL。
正如你所說添加列到表的末尾將避免需要進行重建,所以很可能是爲了避免這一點,如果你並不需要擔心其中一列是最簡單的方法。
或者你可以添加一個遷移腳本:
你提到遷移V2,該測試版功能ŧ改變了遷移的工作方式,以便更好地支持分支和合並以及DVCS系統。請參閱http://www.red-gate.com/migrations
版本1遷移腳本需要進行一些修改才能轉換爲v2遷移腳本。這是一個相當微不足道的變化。目前,我們正在編寫此文檔,如果您希望瞭解有關此更改的更多信息,請聯繫Google集團。 https://groups.google.com/forum/#!forum/red-gate-migrations
我使用SSMS將列移動到表的末尾以否定遷移腳本的需要。
在類似的情況下,移動列不方便,這是我將SSMS腳本轉換爲Migrations V2腳本所做的。
下面是簡單的SQL查詢,這將有助於不會丟失數據插入數據庫表列。
讓說CCDetails
就是我們只想Sys_CreatedBy
列前插入列GlobaleNote
表:
declare @str1 nvarchar(1000)
declare @tableName nvarchar(1000)
set @tableName='CCDetails'
set @str1 = ''
SELECT @str1 = @str1 + ', ' + COLUMN_NAME
FROM Information_Schema.Columns
WHERE Table_Name = @tableName
ORDER BY Ordinal_Position
set @str1 = right(@str1, len(@str1) - 2)
set @str1 = 'select ' + @str1 +' into '[email protected]+'Temp from '[email protected]+' ; Drop Table '+ @tableName + ' ; EXEC sp_rename '[email protected]+'Temp, '[email protected]
set @str1 = REPLACE(@str1,'Sys_CreatedBy','CAST('''' as nvarchar(max)) As GlobaleNote , Sys_CreatedBy')
exec sp_executesql @str1
感謝喬恩。看起來像當你在SSMS中得到警告,表將被刪除,並且你可以選擇查看SSMS重新創建腳本時,這個腳本應該被保存,然後變成一個遷移腳本。 –