Exec sproc от Powershell - PullRequest
       20

Exec sproc от Powershell

2 голосов
/ 28 октября 2009

Я хотел бы выполнить хранимую процедуру из 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 ]

2 голосов
/ 29 октября 2009

Для прямой PowerShell я бы использовал код, подобный написанному вами и Андомаром. Однако, если вы используете PowerShell Community Extensions , есть некоторые командлеты для работы с ADO, например ::1003 *

$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 голосов
/ 13 ноября 2009

У меня Windows Server 2008 с PowerShell 2.0 и SQL Server 2008, и я смог использовать Invoke-SqlCmd для выполнения sql для базы данных.

Вам нужно будет добавить оснастки с помощью этих двух команд:

Add-PSSnapin SqlServerCmdletSnapin100

Add-PSSnapin SqlServerProviderSnapin100

После этого Invoke-sqlcms будет доступен для вашего сеанса PowerShell, посмотрите на http://technet.microsoft.com/en-us/library/cc281720.aspx примеры использования invoke-sqlcmd

1 голос
/ 28 октября 2009

ExecuteNonQuery () запускает хранимую процедуру, но не запрашивает результаты. Вам придется использовать ExecuteReader () для набора строк или 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]
...