2012-03-05 9 views
1

我使用SQL Server 2008的任何獲取SSMS腳本嚮導生成的T-SQL的方法?

我試圖腳本我所有的存儲過程,這是很容易的就在SSMS做一下我的數據庫,然後將任務 - >生成腳本。我設置了我的選擇,一切都很好。

我想獲得該腳本嚮導執行,這樣我就不必經歷和選擇所有的我的選擇,每一次我想這樣做實際的T-SQL。我想打開腳本並運行。有沒有辦法複製嚮導本身正在執行的腳本?或者我每次都必須手動執行?

+0

運行事件探查器跟蹤。它會告訴你SSMS正在做什麼。 – 2012-03-05 21:24:53

+0

你打開這個非常簡單的PowerShell腳本? – JNK 2012-03-05 21:29:07

+0

@JNK如果這就是你得到的,打我。 – Jason 2012-03-05 21:38:34

回答

1

您可以使用SMO框架一個非常簡單的PowerShell腳本做到這一點。您需要安裝SQL Server Management Studio才能獲取框架。你應該進一步研究,但基本框架將是:

[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") 

$srv = new-object "Microsoft.SqlServer.Management.SMO.Server" 'MyServer' 

$db = New-Object "Microsoft.SqlServer.Management.SMO.Database" 
$db = $srv.Databases['MyDatabase'] 

$scr = New-Object "Microsoft.SqlServer.Management.Smo.Scripter" 
$scr.Server = $srv 

$scr.options.filename = 'C:\SomeFolder\MyExports.SQL' 

$db.StoredProcedures | where-object {$_.IsSystemObject -eq $False} | %{$scr.Script($_)} 

您可能需要更改一些其他選項。 MSDN has a pretty thorough overview of the framework here.

本質上面會編寫腳本都在一個數據庫中你指定的任何文件存儲的特效。 SMO是SSMS使用的框架,所以它應該是相同的。

0

如果您所追求的只是「腳本所有過程」,並且它是一次性事物,您可以在Management Studio中打開Object Explorer Details,突出顯示對象資源管理器中的存儲過程,然後按Ctrl + A,右鍵單擊,腳本> ...

如果你想要一個稍微更自動化的方式,目前市場上幾種模式比較的產品,這樣你就不必在乎那Management Studio中用於生成腳本的腳本一個單一的對象。作爲獎勵,同步其他更復雜的對象會更容易 - 只需嘗試爲表生成腳本,並且您將看到它不是野餐。我在this blog post中搜索了很多選項。

+0

不知道你是否已經爲此嘗試過PS,但它效果很好,亞倫。它會執行依賴關係和其他所有你可能需要的。如果您好奇,請告訴我,我可以向您發送一些示例腳本。 – JNK 2012-03-05 21:59:41

+0

@JNK對於具有列約束,默認值,觸發器,別名類型等的CREATE TABLE?如何權限?我的觀點是,你可以用PowerShell自己做這件事,但要做到這一點並且完全完成將會是一項非常大的工作(除非你的表格非常簡單)。 – 2012-03-05 22:31:43

+0

@JNK我很樂意被誤認爲和PS很可能處理所有我能夠預料的細微差別。另一個複雜因素:如果某些對象已經存在於目的地,並處於相同或不同的狀態?我懷疑PS無法比較兩個數據庫並編寫增量腳本(在任何情況下,這可能都是這個練習中比較單調的部分)。 – 2012-03-05 22:48:36

相關問題