来自Powershell的Exec sproc

时间:2009-10-28 06:00:56

标签: sql powershell exec powershell-v2.0 stored-procedures

我想从Powershell(v2)对SQL Server 2008数据库执行存储过程。使用C#作为我的主要语言,我就是以这种方式做到的。例如,当我需要运行一个不返回结果的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的问题。

3 个答案:

答案 0 :(得分: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 :(得分:2)

我有一个带有PowerShell 2.0和SQL Server 2008的Windows Server 2008,我已经能够使用Invoke-SqlCmd对数据库执行sql。

您需要使用以下两个命令添加snapins:

Add-PSSnapin SqlServerCmdletSnapin100

Add-PSSnapin SqlServerProviderSnapin100

执行此操作后,您可以使用Invoke-sqlcms进行PowerShell会话,查看使用invoke-sqlcmd的示例http://technet.microsoft.com/en-us/library/cc281720.aspx

答案 2 :(得分: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]