我试图从Azure Runbook中调用维护SP:
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门户中测试时,我收到以下错误:
异常调用" ExecuteNonQuery"用" 0"参数:" The 参数化查询'(@ tableName nvarchar(4000),@ olderThan nvarchar(4000))EXEC [dbo]。'期望参数' @ tableName',哪个 没有供应。"
我尝试了传递网上发现的参数的所有其他变体,如下所示:
$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
和其他许多人但总是失败:
异常调用" ExecuteNonQuery"用" 0"参数:"程序 或功能' BackupLogTable'期望参数' @ tableName',哪个 没有供应。"
我做错了什么?
答案 0 :(得分:1)
如何将参数传递给内联脚本?
有一些限制;例如Get-AutomationVariable / AutomationCredential在InlineScript中不可用。
" InlineScript活动在单独的非工作流会话中运行一个命令块,并将其输出返回到工作流。当工作流中的命令发送到Windows Workflow Foundation进行处理时,Windows PowerShell会处理InlineScript块中的命令。该活动使用标准工作流通用参数,包括PSComputerName和PSCredential,允许您指定代码块在另一台计算机上运行或使用备用凭据。"
因此,如何传递和获取变量存在一些限制。
但是,您可以使用$ Using将值传递给inlinescript。
例如:InlineScript {Write-output $ using:TableName}
希望能够做到这一点。
另请参阅有关inlinescript的建议:https://technet.microsoft.com/en-us/library/dn469257(v=sc.16).aspx#bkmk_InlineScript