【问题标题】:Correct way to pass query parameter in C# as argument to IN operator in BigQuery在 C# 中将查询参数作为参数传递给 BigQuery 中的 IN 运算符的正确方法
【发布时间】:2018-09-17 06:50:21
【问题描述】:

我希望将字符串数组作为查询参数传递给IN 运算符。我已经为此苦苦挣扎了一段时间,但我尝试的任何方法似乎都不起作用。我想知道这是否可能做到。

我尝试了以下语法变体:

where state IN (@states)
where state IN @states
where state IN ARRAY(@states)
where state IN (ARRAY(@states))

这是 C# 的结尾:

new BigQueryParameter("states", BigQueryDbType.Array, new[] {"AL", "CA"}),
new BigQueryParameter("states", null, new[] {"AL", "CA"}),

我会遇到各种错误,具体取决于我的尝试:

  • 对于参数类型 STRING 和 {ARRAY} 的运算符 IN 没有匹配的签名
  • 语法错误:应为“(”或关键字 SELECT 或关键字 WITH 但得到“@”
  • 语法错误:应为“(”或关键字 UNNEST,但得到关键字 ARRAY
  • 语法错误:应为“(”或关键字 UNNEST 但得到“@”

【问题讨论】:

  • 那么,你查到UNNEST了吗?它看起来不像你想要的吗?
  • 我没想到。我认为只做IN (@states) 必须工作。感谢您的提示。

标签: c# google-bigquery


【解决方案1】:

像这样使用UNNEST 运算符:

SQL

where state IN UNNEST(@states)

C#

new BigQueryParameter("states", BigQueryDbType.Array, new[] {"AL", "CA"}) {ArrayElementType = BigQueryDbType.String},

【讨论】:

  • 就是这样。我还发现了一件事。如果想要空数组匹配 ALL,正确的语法似乎是 ARRAY_LENGTH(@states) IS NULL OR state IN UNNEST(@states) 而不是 ARRAY_LENGTH(@states) = 0 OR state IN UNNEST(@states)。看起来很奇怪,但这对我有用。
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 2018-10-28
  • 2011-02-15
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多