2011-09-21 52 views
1

是否有可能複製和現有的數據庫,或生成的SQL,然後對SQL數據庫運行它來創建一個現有的數據庫的副本?以編程方式重新創建現有的sql server數據庫?

我不關心數據,只是模式。

我想爲單元測試做這件事。我知道我可以使用sqlite,但我很好奇這將如何工作。

我沒有任何存儲的特效什麼的,只是表和PK/FK等

我想最好的辦法是莫名其妙地生成SQL模式,那麼只要運行它針對數據庫。

或者如果更容易,請複製數據庫,然後截斷表格。

注意:我想知道如何以編程方式

+0

http://blog.sqlauthority。COM/2007/08/21/SQL服務器2005年創建腳本到複製數據庫架構和所有的對象,存儲過程,函數,觸發器,表,視圖約束 - 和 - 所有其他數據庫對象/ – johnny

回答

4

您可以通過右鍵單擊數據庫 - >任務 - >從SQL管理工作室生成腳本來生成腳本。 在嚮導中,您可以在高級設置下(取決於SQL管理工具版本)選擇您需要模式,數據還是兩者。 enter image description here

UPDATE

要創建數據庫編程,你可以使用SQL生成,並通過ADO.NET執行它。 或者,如果您使用CodeFirst,則可以在測試類中爲上下文設置CreateDatabaseIfNotExists初始值設定項時自動執行此操作。您可以使用Entity Framework Power Tools對Visual Studio逆向工程現有應用程序,從數據庫創建CodeFirst上下文。在這種情況下,你只需要指定連接字符串到不存在的數據庫,CF就會爲你創建它。您還可以指定DropCreateDatabaseAlways,以便每次運行測試時都刷新數據庫(與在預先刪除數據庫問題以生成sql腳本後每次執行sql查詢相同) 如果使用codefirst,則不需要生成sql腳本。

如果您喜歡這些方法中的任何一種,如果您願意,我可以爲您提供更多資源?

+1

我知道,我問如何可以編程方式而不是通過GUI。 – Blankman

+0

我已經擴大了我的答案,你需要更多的信息嗎? –

1

您可以使用SQL Server Management Objects Class庫中的對象。

例如,Database類實現IScriptable。我會用它作爲我的出發點(但我自己並沒有這樣做)。這可能會產生太多不相關的腳本,在這種情況下,您可能需要枚舉單個表併爲其生成腳本。

但是SMO總是這樣回答「我該如何對SQL Server進行管理任務?」。

3

您可以用nhibernate以編程方式進行編輯。 NHibernate的創建所有的表 和數據庫只在 任何數據庫服務器,如Oracle,MySQL和MSSQL創建數據庫實例(名稱)的關係...

你可以看看this瞭解詳情。

相關問題