2015-11-17 68 views
0

我知道大多數人都會給喜歡的反應,右鍵單擊數據庫名稱,選擇任務,生成腳本,等大多數人給互聯網上的細節響應包括計算器方法導入/導出SQL Server存儲過程

我已經知道很久以前。

我的問題是編寫腳本導出/導入存儲過程的任何建議。如果我只需要做5或10,那不是什麼大問題。我只需要選擇正確的。如果有很多像50或更多,這是痛苦的,必然是錯誤。有時,爲了使生活更輕鬆,我們希望導出/導入後綴,例如*test.sql

任何建議使用SQL腳本,C#或dos命令來做到這一點?

感謝

回答

0

你爲什麼標記,當你問在SQL或DOS腳本答案C#這個問題?

這CMD腳本刪除所有存儲過程,其名稱開頭 「USP」:在一個線和%SERVER%和%DATABASE%

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S %SERVER% -d %DATABASE% -Q "select name from sys.objects where type = 'P'" `) DO (echo %%F | findstr "^usp" >nul 2>&1 && sqlcmd -S %SERVER% -d %DATABASE% -Q "drop procedure %%F") 

這一切都確定了服務器和數據庫。

該腳本從名稱與「usp * .sql」匹配的當前目錄加載所有存儲過程。如果調用XML數據類型方法,則需要將QUOTED_IDENTIFIER設置爲ON。

for %%f in (usp*.sql) do sqlcmd -S %SERVER% -d %DATABASE% -I -i %%f 
+0

感謝。哪個參數用於導出?我只是做了sqlcmd的幫助,我找不到導出或腳本例程。編寫批處理的一個原因是導出一堆文件。你確實放下了拖放程序。儘管我不想編寫批量程序來刪除一堆SP,但它仍然很有幫助。這是太多的風險。哦,我標記C#的原因,我只是好奇,如果有一個API來這樣做。如果批處理可以這樣做,它服務於 – user12345

+0

「如何將存儲過程導出到文本文件」(http://www.sqlservercentral.com/Forums/Topic205892-5-1.aspx)顯示了幾種技術。您可能想要在SSMS中打開數據庫,右鍵單擊數據庫名稱並選擇任務 - >生成腳本;然後按照嚮導。 –

+0

任務 - >生成腳本是我已經知道的步驟。有一次,我不得不出口50多個SP。這是痛苦的,最終我輸出了我不應該輸出的那一個。我也想念一對夫婦。當我必須在500+ sp中導出50+ sp時,很有可能點擊錯誤的SP。我很快會再做同樣的事情。這一次我必須爲其他人準備腳本。如果有一個更容易,這將是很好的。我會嘗試BCP_utility,http://www.kodyaz.com/t-sql/bcp-and-sp_helptext-to-script-store-procedures-into-seperate-files.aspx,我希望這會有所幫助 – user12345

0

既然您也標記了C#。使用.NET,您可以使用Microsoft.SqlServer.Smo。有一個StoredProcedure class。這種方法可以讓你真正控制你想要完成的任務。使用示例,您可以找到here,也可以使用PowerShell。

這裏有一個片段我已經把可以幫助你(使用Microsoft.SqlServer.SmoMicrosoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.Management.Sdk.Sfc的DLL):

var serverConnection = new ServerConnection(new SqlConnection(ConnectionString)); 
var server = new Server(serverConnection); 
foreach (StoredProcedure sp in server.Databases["YourDB"].StoredProcedures) 
{ 
    if (sp.Name.Contains("yourSubstring")) 
    { 
     System.IO.File.WriteAllText(sp.TextHeader + Environment.NewLine + sp.TextBody); 
    } 
}