2009-10-28 69 views
2

我想從Powershell(v2)針對SQL Server 2008數據庫執行存儲過程。來自使用C#作爲我的主要語言,我正在以這種方式進行。例如,當我需要運行一個存儲過程不返回結果,這裏是我現在在做什麼:從Powershell執行sproc

$con = new-object System.Data.SqlClient.SqlConnection($connectionString) 
$cmd = new-object System.Data.SqlClient.SqlCommand("exec MySproc", $con) 
$con.Open() 
$cmd.ExecuteNonQuery() 
$cn.Close() 

雖然也許TMTOWTDI,我想知道的最佳途徑。

我應該提到我已經熟悉T-SQL和System.Data命名空間。這真的是一個關於Powershell的問題。

回答

2

對於直PowerShell的我會去的代碼和你一樣Andomar所寫。但是,如果您使用的是PowerShell Community Extensions有一些的cmdlet與ADO工作如:

$conn = 'Data Source=.\SQLEXPRESS;Initial Catalog=pubs;Integrated Security=SSPI' 
$ds = Invoke-AdoCommand -ProviderName SqlClient -ConnectionString $conn ` 
      -CommandText 'Select * from Authors' -AsDataSet 
$ds.Tables 


au_id : 172-32-1176 
au_lname : White 
au_fname : Johnson 
phone : 408 496-7223 
address : 10932 Bigge Rd. 
city  : Menlo Park 
state : CA 
zip  : 94025 
contract : True 

... 
1

ExecuteNonQuery()運行存儲過程,但不詢問結果。您必須對行集使用ExecuteReader(),對於具有一個值的行使用ExecuteScalar()。

下面是這個nice tutorial一個例子:

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "..." 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = "sp_helpdb" 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 
$SqlConnection.Close() 
$DataSet.Tables[0] 
+0

對不起,我不清楚我的問題。我打算特意詢問Powershell,因爲我已經熟悉System.Data。 –

2

我有一個Windows Server 2008使用PowerShell 2.0和SQL Server 2008和我已經能夠使用Invoke-SQLCMD執行sql對數據庫。

你需要用這兩個命令添加snapins:

添加-PSSnapin SqlServerCmdletSnapin100

添加-PSSnapin SqlServerProviderSnapin100

這樣的調用,sqlcms將是avaliable您的PowerShell後會話看看http://technet.microsoft.com/en-us/library/cc281720.aspx使用invoke-sqlcmd的例子

+0

這太棒了,謝謝!不幸的是,該腳本將部署到沒有安裝SQL Server 2008的機器上:( –

+0

)這真是一個遺憾,因爲我認爲你會喜歡使用SQL Server cmdlet,也許你會很快升級 – 2009-12-02 20:27:06