2016-06-13 18 views
0

我試圖從Azure中運行手冊中調用維護SP:調用存儲過程從一個Azure的參數運行手冊

inlinescript { 
     ......... 
     $Cmd = New-object System.Data.SqlClient.SqlCommand 
     $Cmd.Connection = $Conn 
     $Cmd.CommandText = "EXEC [dbo].[BackupLogTable] @tableName, @olderThan" 

     $Cmd.Parameters.AddWithValue("@tableName", $TableName) 
     $Cmd.Parameters.AddWithValue("@olderThan", $OlderThan) 

     $Cmd.ExecuteNonQuery() 
     ..... 
    } 

的SP聲明如下:

alter procedure [dbo].[BackupLogTable] (
    @tableName nvarchar(512), 
    @olderThan int 
) 
with execute as owner as 

和我可以在我的Runbook使用的同一用戶下成功運行SSMS。但在Azure的門戶網站進行測試時,它,我發現了以下錯誤:

Exception calling "ExecuteNonQuery" with "0" argument(s): "The parameterized query '(@tableName nvarchar(4000),@olderThan nvarchar(4000))EXEC [dbo].' expects the parameter '@tableName', which was not supplied."

我試圖通過在網絡上找到的參數,如這一個的每一個其他變體:

$Cmd.CommandText = "[BackupLogTable]" 
$Cmd.CommandType = [System.Data.CommandType]::StoredProcedure 

$Cmd.Parameters.Add("@tableName", [System.Data.SqlDbType]::NVarChar, 512) | Out-Null 
$Cmd.Parameters["@tableName"].Value = $TableName 

$Cmd.Parameters.Add("@olderThan", [System.Data.SqlDbType]::Int) | Out-Null 
$Cmd.Parameters["@olderThan"].Value = $OlderThan 

和其他許多人,但它總是失敗:

Exception calling "ExecuteNonQuery" with "0" argument(s): "Procedure or function 'BackupLogTable' expects parameter '@tableName', which was not supplied."

我在做什麼錯?

回答

1

你如何將你的參數傳遞給你的內聯腳本?

有一些限制;例如Get-AutomationVariable/AutomationCredential在InlineScript中不可用。

「InlineScript活動在單獨的非工作流會話中運行命令塊,並將其輸出返回給工作流程。當工作流程中的命令發送到Windows Workflow Foundation進行處理時,InlineScript塊中的命令將被處理通過Windows PowerShell。該活動使用標準工作流常用參數,包括PSComputerName和PSCredential,它們允許您指定代碼塊在另一臺計算機上運行或使用備用憑據。「

所以,如何傳遞和獲取變量有一些限制。

但是,您可以使用$ Using將值傳遞給inlinecript。

E.g:將InlineScript {寫輸出$使用:表名}

希望這會做的伎倆。

另請參閱關於inlinecript的建議:https://technet.microsoft.com/en-us/library/dn469257(v=sc.16).aspx#bkmk_InlineScript

+0

謝謝! 'inlinescript'中我不知道'$ using'是需要的。 – UserControl

相關問題