質問

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に関する質問です。

役に立ちましたか?

解決

PowerShellの場合は、あなたとAndomarが書いたようなコードを使用します。ただし、 PowerShell Community Extensions を使用している場合、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

...

他のヒント

Windows Server 2008とPowerShell 2.0およびSQL Server 2008があり、Invoke-SqlCmdを使用してデータベースに対してsqlを実行できました。

次の2つのコマンドでスナップインを追加する必要があります。

Add-PSSnapin SqlServerCmdletSnapin100

Add-PSSnapin SqlServerProviderSnapin100

これを実行すると、Invoke-sqlcmsがPowerShellセッションで利用可能になります http://technet.microsoft.com/en-us/library/cc281720.aspx invoke-sqlcmdの使用例

ExecuteNonQuery()はストアドプロシージャを実行しますが、結果を要求しません。行セットにExecuteReader()を使用するか、1つの値を持つ1つの行にExecuteScalar()を使用する必要があります。

この素敵なチュートリアル

$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]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top