在 Azure 服务总线订阅 SqlFilter 表达式中使用参数

Using parameters in Azure Service Bus Subscription SqlFilter expression

我正在使用 ARM 模板尝试部署对 Azure 服务总线主题的订阅,该主题根据 To 系统 属性 过滤消息。我想从 ARM 模板参数中提取过滤器的值,但我似乎无法获取模板来解析 SqlExpression 中的参数。

下面是我一直在摆弄的模板。我想我也许可以只切换 requiresPreprocessing 开关来让它解析部署时的参数,但没有骰子。我还尝试使用双方括号或冒号来转义它,如下面的 link

所示

https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-sql-filter#propertyname

{
 "apiVersion": "2017-04-01",
 "name": "[concat(parameters('mynamespace'), '/', parameters('topic'), '/', parameters('myVariable'),'/direct')]",
 "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions/rules",
 "dependsOn": [
   "[resourceId('Microsoft.ServiceBus/namespaces', parameters('mynamespace'))]",
   "[resourceId('Microsoft.ServiceBus/namespaces/topics', parameters('mynamespace'), parameters('topic'))]",
   "[resourceId('Microsoft.ServiceBus/namespaces/topics/subscriptions', parameters('mynamespace'), parameters('topic'), parameters('myVariable'))]"
 ],
 "properties": {
   "filterType": "SqlFilter",
   "sqlFilter": {
     "sqlExpression": "sys.To=[parameters('myVariable')] OR sys.To IS NULL",
     "requiresPreprocessing": true
     }
}

我得到的是与 sqlExpression 中显示的字符串完全相同的字符串,但我想在单引号字符串中获取变量解析的值。

此主题订阅规则只能获取静态值。也许您可以尝试使用静态值而不是 [parameters('myVariable')]。这个问题可能是因为给 属性 sys.To 赋予了动态值。

您可以使用:"[concat('sys.To=',[parameters('myVariable')],' OR sys.To IS NULL')]".

我认为你不能在 ARM 模板中使用内联表达式,因此你应该将整个东西变成一个表达式,在这种情况下使用 concat 将各个部分粘合在一起。

提示:包括单引号很困难,所以像这样的变量可能会派上用场:

"SQ": "'"