代码之家  ›  专栏  ›  技术社区  ›  Justin R.

PowerShell中的exec存储过程

  •  2
  • Justin R.  · 技术社区  · 15 年前

    我希望对SQL Server 2008数据库执行PowerShell(v2)中的存储过程。从使用C作为我的主要语言开始,我就是用这种方式来做的。例如,当我需要运行一个不返回结果的存储过程时,我现在要做的是:

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

    也许我想知道最好的方法。

    我应该提到,我已经熟悉T-SQL和System.Data命名空间。这确实是一个关于PowerShell的问题。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Keith Hill    15 年前

    对于纯PowerShell,我将使用您和Andomar编写的代码。但是,如果使用 PowerShell Community Extensions 有一些用于ADO的Cmdlet,例如:

    $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
    
    ...
    
        2
  •  2
  •   user156862    15 年前

    我有一个Windows Server 2008,带有PowerShell 2.0和SQL Server 2008,并且我能够使用invoke sqlcmd对数据库执行SQL。

    您需要使用以下两个命令添加管理单元:

    添加pssnapin sqlserverCmdletSnapin100

    添加pssnapin sqlserverprovidersnapin100

    完成此操作后,调用sqlcms将对PowerShell会话可用。请查看 http://technet.microsoft.com/en-us/library/cc281720.aspx 有关使用invoke sqlcmd的示例

        3
  •  1
  •   Andomar    15 年前

    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]