2011-06-20 200 views
1

我要生成腳本從SQL Server 2005。我已經做到了通過SQL Management Studio中,即存儲過程和用戶​​定義函數的存儲過程,但我想通過命令行做到這一點。是否有任何方式通過像sqlcmd.exe或任何其他腳本這樣的命令行參數來執行此操作。生成命令行

+0

的重複[我怎樣才能在SQL Server Management Studio 2008的自動「生成腳本」任務?(http://stackoverflow.com/questions/483568/how-can-i-automate-the-generate-scripts-task-in-sql-server-management-studio-20) - 看到這對以前的SO問題如何做到這一點 –

+0

該解決方案是不是一個確切的答案,但你會發現這是一種有益的選擇:http://weblogs.asp.net/stevewellens/archive/2009/12/11/automatically-generate-stored-procedures -with-visual-studio.aspx –

回答

0

如果你喜歡多一點靈活性的東西,檢查出sys.sql_modules系統視圖,因爲它給你關於對象的一些額外的信息和有能夠加入其他系統表的能力很好。

MauMen的回答其餘的方向是正確的,但:使用SQLCMD與「-o OutputFile.sql」生成輸出到文件中。

例如,創建一個進程:

create proc dbo.pr_procDefTest 
as 
print 'This is a proc definition' 
go 

顯示的定義:

select m.definition 
from sys.procedures p 
inner join sys.sql_modules m on p.object_id = m.object_id 
where p.name = 'pr_procDefTest' 

輸出與SQLCMD:

sqlcmd -E -S .\sqlexpress -d test -o OutputFile.sql -Q "set nocount on; select m.definition from sys.procedures p inner join sys.sql_modules m on p.object_id = m.object_id where p.name = 'pr_procDefTest'" -h -1 -w 65535 

有多種傳入PARAMATERS的,這你可以看看sqlcmd Utility MSDN page。重要的是要注意使用「set nocount on」;在腳本的開頭,以防止「(1行受到影響)」頁腳。

+1

@Cadeaeic我喜歡你解決方案。它很好地擴展了我的想法。 – MauMen

0

微軟發佈了一個新的工具,在幾個星期前稱爲MSSQL,編劇這是在SSMS「生成腳本」嚮導的命令行版本。這是一個基於Python的,開源的命令行工具,你可以找到官方公佈here。本質上,腳本允許您爲數據庫/數據庫對象生成一個T-SQL腳本,作爲.sql文件。您可以生成該文件然後執行它。這可能是您生成模式和/或數據庫對象(例如存儲過程)的很好的解決方案。下面是一個簡單的使用例子,讓你開始:

$ pip install mssql-scripter 
# script the database schema and data piped to a file. 
$ mssql-scripter -S localhost -d AdventureWorks -U sa --include-objects StoredProcs --schema-and-data > ./myFile.sql 

更多使用的例子是我們的GitHub頁面在這裏:https://github.com/Microsoft/sql-xplat-cli/blob/dev/doc/usage_guide.md