簡體   English   中英

使用Azure Runbook中的參數調用存儲過程

[英]Call a stored procedure with parameters from an Azure runbook

我試圖從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門戶中對其進行測試時,出現以下錯誤:

”使用參數“ 0”調用“ ExecuteNonQuery”的異常:“參數化查詢'(@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

和許多其他功能,但始終失敗:

“使用” 0“參數調用” ExecuteNonQuery“的異常:”過程或函數'BackupLogTable'期望參數'@tableName',未提供。”

我究竟做錯了什么?

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

有一些限制。 例如,InlineScript中不提供Get-AutomationVariable / AutomationCredential。

“ InlineScript活動在單獨的非工作流會話中運行命令塊,並將其輸出返回給工作流。將工作流中的命令發送到Windows Workflow Foundation進行處理時,Windows PowerShell將處理InlineScript塊中的命令。該活動使用標准的工作流公用參數,包括PSComputerName和PSCredential,它們使您可以指定代碼塊是在另一台計算機上運行還是使用備用憑據。”

因此,在如何傳遞和獲取變量方面存在一些限制。

但是,您可以使用$ Using將值傳遞到內聯腳本中。

例如:InlineScript {寫輸出$ using:TableName}

希望能做到這一點。

另請參見以下關於內聯腳本的建議: https ://technet.microsoft.com/zh-cn/library/dn469257(v = sc.16).aspx#bkmk_InlineScript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM