在 C# 中将查询参数作为参数传递给 BigQuery 中的 IN 运算符的正确方法
Posted
技术标签:
【中文标题】在 C# 中将查询参数作为参数传递给 BigQuery 中的 IN 运算符的正确方法【英文标题】:Correct way to pass query parameter in C# as argument to IN operator in BigQuery 【发布时间】: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)
必须工作。感谢您的提示。
【参考方案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)
。看起来很奇怪,但这对我有用。以上是关于在 C# 中将查询参数作为参数传递给 BigQuery 中的 IN 运算符的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio for Mac 中将参数传递给 Main() C#