在SQL Server Management Studio中,可以選擇「生成腳本」。我們當前將2008 sql服務器數據庫傳輸到2005 sql server數據庫的方式是生成腳本並在該sql腳本文件上運行SQLCMD以推送到2005 sql server的本地實例。我創建了一個C#程序來完成其他一些任務,但我也需要它來轉換2008數據庫並將其移動到2005 sql服務器。是否有Transact sql語句或將2008數據庫轉換爲2005數據庫的更簡單方法?謝謝。生成等效於Transact SQL的腳本
回答
您的開發交付物不應該是數據庫二進制文件(.MDF文件),而應該是部署腳本。你像對待任何其他源文件一樣對待你的數據庫部署和升級,將它置於源代碼控制之下,在檢入時有同行代碼評論等等。直接修改.MDF,然後進行逆向工程來部署它就是非常糟糕。您現在遇到的問題只是其中一個問題,還有更多問題,特別是在應用程序版本升級期間完成的問題模式更改。見Version Control and your Database。
現在的確如此,整個VS工具集正在試圖引導您沿着'在VS數據庫瀏覽器中編輯您的MDF並且一切都會好的'路徑。沒有什麼會好起來的,一個或多個部署崩潰在你的生活中遙遙領先,但讓我們假裝VS會做一件好事。
您可以通過第三方商業工具(如Red Gate的SQL Compare)自動提取當前模式並對其進行部署,或者您可以非常容易地自行生成「生成腳本」。 SSMS所做的就是調用SMO腳本功能來編寫整個數據庫。你可以這樣做:實例化一個對象實例,然後添加你想要腳本的對象,然後提取T-SQL生成的腳本。那就是究竟是 SSMS中的'生成腳本'是什麼。沒有爲scripting在MSDN的例子:
//Connect to the local, default instance of SQL Server.
Server srv = new Server();
//Reference the AdventureWorks2008R2 database.
Database db = srv.Databases["AdventureWorks2008R2"];
//Define a Scripter object and set the required scripting options.
Scripter scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;
//Iterate through the tables in database and script each one. Display the script.
//Note that the StringCollection type needs the System.Collections.Specialized namespace to be included.
Microsoft.SqlServer.Management.Sdk.Sfc.Urn[] smoObjects = new Microsoft.SqlServer.Management.Sdk.Sfc.Urn[1] ;
foreach (Table tb in db.Tables) {
smoObjects[0] = tb.Urn;
if (tb.IsSystemObject == false) {
System.Collections.Specialized.StringCollection sc;
sc = scrp.Script(smoObjects);
foreach (string st in sc) {
Console.WriteLine(st);
}
}
}
Remus,謝謝你的回覆。你的回覆使我更多地搜索了我以前不知道的課程。我遇到了Transfer類,它完全按照我希望的方式進行操作(有了它,我不必寫一個sql腳本並調用SQLCMD!),但它不會執行一件我需要的操作:它不會執行任何操作: t複製所有的約束(只是數據)。所以所有的FK,PK和IX都不見了。你知道我會如何轉移這些嗎?我找不到讓這些人轉移的選項?謝謝! – dangerisgo 2010-12-18 20:56:36
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b5219a28-64c2-462b-a263-66ae9cc9c45c/這也有幫助。謝啦! – dangerisgo 2010-12-18 21:45:56
從一個數據庫導入在其他
我不完全確定你的意思。 – dangerisgo 2010-12-18 00:01:29
轉到2005 Server Management Studio控制檯,右鍵單擊您的Db並選擇任務>導入數據。從SQL 2008 Server導入數據並按照嚮導進行操作。保存包。那就是你的代碼。運行也爲填充 – renegm 2010-12-18 00:45:21
2005年SQL服務器是一個Express版本和2008年sql服務器是完整版本,但我不能保存該軟件包。我甚至做過2008年 - > 2008年,但仍然無法保存包裹。 – dangerisgo 2010-12-18 00:54:10
腳本編寫數據庫對象出來,然後上了年紀的實例中運行它們是要走的路。如果您編碼了SQL 2008的特定功能,那麼在2005年運行腳本時,您會發現它很正確(在使用Production之前進行測試!)。
設置兼容模式將不是幫助這裏。如果我有一個(2008)聲明的表類型,並將其與存儲過程參數一起使用,那麼SQL或其他任何人都可以將其遷移到2005年。使用「現代」系統來支持舊版系統最多也不過分。
只是因爲我做一遍,我的首選遷移路徑是:
- 有發展,‘分期’和生產環境,都在2005年
- 升級升級到2008
- 繼續在dev/2005上進行開發,並將更改推向舞臺(2008)和製作(2005)。當它在2008年運行時(幾乎肯定會),管理層將滿足於升級生產。而你的2005年版本仍將在2005年的產品上運行。
- 升級生產。嘿,它工作在升級,所以
- 而從產生的一切(2005)開發適用於(2008年)分期和生產
- 才把你升級發展,並與您的新玩具 發揮它的安全和穩健
這與我們所做的相似。一切從2005年開始。然後開發到2008年,生產停留在2005年。一旦我們的數據庫已經足夠完善並準備就緒,產量將延續到2008年。問題是我們必須支持將會有2005年的遺留系統,所以我們可以不會打破這些。我每次生產版本都會生成腳本,並且效果很好。問題是我正在編寫這個自動化程序,所以沒有管理工作室的交互,這樣任何人都可以運行它並從2008服務器上獲取2005 bak文件。 – dangerisgo 2010-12-18 00:25:56
- 1. golang mongodb中的Transact-SQL等效集合
- 2. 等效於Document.Write()的腳本
- 3. 生成SQL腳本
- 4. SQL腳本生成SQL腳本
- 5. EF4生成無效腳本
- 6. 用於爲表格生成腳本的SQL服務器腳本
- 7. 創建有效的SQL腳本以生成SQL Server數據庫
- 8. 等效於Java MessageDigest的Shell腳本
- 9. SQL Server生成腳本
- 10. 從表生成sql腳本
- 11. C#等效於boost :: gregorian生成器
- 12. 在Transact-SQL中是否有與typedef等效的功能?
- 13. Angular.js等價於`rails生成腳手架?
- 14. 如何改進sql server 2005的這個transact-sql腳本?
- 15. 對於SQL的LINQ等效
- 16. 由PowerDesigner生成的sql server腳本
- 17. 生成觸發器的SQL腳本
- 18. 使用約束時,MS SQL Server 2008腳本生成會創建無效腳本
- 19. 以有效方式生成動態SQL過濾器腳本
- 20. IN等於odata的SQL等效
- 21. 關於「腳本生成」的新手
- 22. Oracle SQL腳本中基於條件的假脫機生成
- 23. 快速生成基於sql 2008數據庫的ascii文本sql腳本
- 24. 生成腳本
- 25. Maya MEL腳本sprintf等效
- 26. 哪個Transact-SQL查詢最有效?
- 27. Oracle SQL%ROWCOUNT等效於DBMS_PARALLEL_EXECUTE
- 28. LINQ等效於SQL BETWEEN
- 29. #define等效於Oracle SQL?
- 30. LINQ/Lambda等效於SQL
一個問題:爲什麼彈簧介意... – 2010-12-17 23:35:30
及其對我國的傳統系統的支持。 – dangerisgo 2010-12-17 23:58:49
如果你支持2005年,你爲什麼在2008年發展,這種方式是瘋狂的。遲早你會使用一些2005年無法識別的代碼,並發現當你移動prod是一個非常糟糕的時間。開發新版本比開發非常危險。 – HLGEM 2010-12-20 14:37:08