在 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#

如何在 C# 函数中将 jquery 变量作为参数传递

如何在一个条目中将RGB作为单独的参数传递给函数

在python 3中将参数传递给exec

将 DateTime 值作为参数传递给 OleDbCommand

如何在反应测试库中将参数传递给 getByText?