【问题标题】:Conditional SELECT from ACCESS来自 ACCESS 的条件选择
【发布时间】:2015-04-13 13:18:37
【问题描述】:

我正在使用 OleDb 来查询 Access 数据库

我有一个 SQL,它从 3 个连接表中选择多个列。在我尝试包含 CASE 语句或等效语句之前,它工作正常。

如果 TableA.col1 为 NULL,我想返回 TableB.col2,否则我想要 TableA.col1。

按要求提供样本数据:

table A
col 1 - NULL
col 2 - 78

table B
col 1 - 53
col 2 - 12

如果上面存在,TableA.col1 为 NULL 所以我想要 TableB.col2: 12

table A
col 1 - 35
col 2 - 78

table B
col 1 - 53
col 2 - 12

如果上面存在,TableA.col1 不为 NULL,所以我会返回它:35

我的 SQL 已经连接了 3 个表并返回 100 列。这只是在列表中添加了一个额外的列。

我试过了:

SELECT CASE WHEN TableA.col1 IS NULL THEN TableB.col2 ELSE TableA.col1 AS col

这给出了 System.Data.dll 中发生的“System.Data.OleDb.OleDbException”类型的第一次机会异常 附加信息:IErrorInfo.GetDescription 失败,出现 E_FAIL(0x80004005) 和

Nz(TableA.col1, TableB.col2) AS col

给我:System.Data.dll 中发生了“System.Data.OleDb.OleDbException”类型的第一次机会异常 附加信息:表达式中未定义的函数“NZ” 还有这两个:

IIF(TableA.col1 is NULL, TableB.col2,TableA.col1) AS col 
IIF(isNull(TableA.col1), TableB.col2,TableA.col1) AS col 

两者都给出了相当通用的错误消息:System.Data.dll 中发生了“System.Data.OleDb.OleDbException”类型的第一次机会异常 附加信息:没有为一个或多个必需参数指定值。

【问题讨论】:

  • 请使用示例数据和所需结果编辑您的问题。目前尚不清楚您要做什么。
  • 如果 TableA.col1 为 NULL,我想返回 TableB.col2,否则我想要 TableA.col1;按要求添加示例数据

标签: sql ms-access oledb


【解决方案1】:

这是有效的 Access SQL 语法:

IIF(TableA.col1 is NULL, TableB.col2, TableA.col1) AS col

错误消息“没有为一个或多个必需参数提供值”,表明 Access 无法将查询中的某些内容识别为对象、函数或 SQL 关键字。通常这是由于拼写错误而发生的。

在 Access 查询设计器中测试您的 SELECT 语句作为新查询。当您尝试从那里运行它时,Access 将显示一个输入对话框,要求您为其找到的第一个参数提供一个值。请注意,对话框包含参数的名称。如果这不能确定问题,请向我们展示您的查询 SQL 并告诉我们 Access 标识的参数的名称。

【讨论】:

  • 谢谢,知道我使用了正确的语法并且有错别字很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多