2016-04-16 12 views
0

Ich habe eine einfache gespeicherte SQL Server-Prozedur, die einen Eingabeparameter akzeptiert und einen Ausgabeparameter setzt. Das Wesen der gespeicherten Prozedur ist wie folgt:Wie bekomme ich den Wert einer gespeicherten Prozedur OUTPUT-Variable

CREATE PROC SomeDB.dbo.SomeProc 
    @input varchar(255), 
    @output int OUTPUT 
AS 
    IF @input = 'a' 
    BEGIN 
     SET @output = 0; 
    END 
    ELSE 
    BEGIN 
     SET @output = 1; 
    END 
    ; 
GO 

ich den Wert des @output Variable in Powershell erhalten möge. Wenn ich dies in SSMS tun wäre, würde ich so etwas wie:

DECLARE @out int; 
EXEC SomeDB.dbo.SomeProc 'a', @out OUTPUT; 
PRINT @out; 

Aber ich glaube nicht, dass in Powershell so einfach ist.

Hier ist mein Skript so weit in Powershell (was ich weiß, ist nicht vollständig):

$ErrorActionPreference = "Stop" 

$server = "some_IP_address" 
$db = "SomeDB" 
$input = "'a'" 
$query = "EXEC dbo.SomeProc $input;" 

try { 
    Invoke-Sqlcmd -ServerInstance $server -Database $db -Query $query -QueryTimeout 60000 
} catch { 
    Write-Host "stored proc error" 
} 

Wie bekomme ich den Wert des @output Variable in Powershell?

Antwort

0

So etwas wie dies funktionieren könnte:

$cn = New-Object Data.SqlClient.SqlConnection 
$cn.ConnectionString = '...' 
$cmd = New-Object Data.SqlClient.SqlCommand 
$cmd.CommandText = 'dbo.SomeProc' 
$cmd.Connection = $cn 
$cmd.CommandType = [Data.CommandType]::StoredProcedure 

$p = $cmd.Parameters.Add('@output', '') 
$p.Direction = [Data.ParameterDirection]::Output 
$p.Size = 42 

$cn.Open() 
$cmd.ExecuteNonQuery() 

$p.SqlValue.Value 

[source]

Verwandte Themen