我想从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的问题。
答案 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]