首页 > 解决方案 > 在 SQL 查询中使用字符串(表中的多值字段)作为 where 子句

问题描述

我尝试使用 VBA 重新定义 SQL 查询,以将多值表字段的内容作为 where 子句包含在内,但我无法让它工作。

首先,我从特定的多值字段中收集所有值(格式为文本,由于导入期间的限制,不能使用数字)

BLPN_Query = DLookup("Kostenstellen_Report", "Optionen_Reportgenerierung", "ID=1")

MsgBox 将返回这个(注意“;”和下一个文本之间的空格): 34; 44

该字符串可以包含几个不同的文本条目。我想使用字符串“BLPN_Query”作为 where 子句条件。到目前为止,我得到的是:

"WHERE (PROKALK.NK_STK>0) AND (PROKALK.TERMIN>{d '" & Startjahr & "-01-01'}) AND (PROKALK.BLPNR='" & BLPN_Query & "')"

如果只有一个条目,它可以工作,但如果有多个条目,它将不起作用(显然)。不确定,但我猜分号和下一个文本之间的空格是一个问题,我必须使用“IN”而不是“=”,但我不知道该怎么做。

解决方案(感谢安德烈!)

1.) 从表中获取数据(看起来像:34;35;36),删除空格并用逗号替换分号,包括 IN 子句元素之间的单引号。现在它看起来像:34','35','36

BLPN_Query = DLookup("Kostenstellen_Report", "Optionen_Reportgenerierung", "ID=1")
BLPN_Query = Replace(BLPN_Query, " ", "")
BLPN_Query = Replace(BLPN_Query, ";", "','")

2.) 在 where 子句中包含字符串(并在字符串前后添加单引号) --> 最终字符串:'34','35','36'

AND (PROKALK.BLPNR IN ('" & BLPN_Query & "'))"

它不漂亮,但会帮助我们,直到我们最终获得新的 ERP 系统并可以替换所有旧东西

标签: sqlsql-servervbams-access

解决方案


IN (...)需要逗号,所以你需要这样做:

BLPN_Query = Replace(BLPN_Query, ";", ",")

然后在 WHERE 子句中:

"WHERE ... AND (PROKALK.BLPNR IN (" & BLPN_Query & "))"

额外的空间不会受到伤害。如果BLPN_Query包含单个值,这也有效,但如果它为空则无效。


推荐阅读