access找不到输入表或者dual_MS Access(Jet / ACE)中的无表UNION查询

你什么都没忽略。Access的数据库引擎将允许SELECT没有FROM数据源的单行。但是,如果你想UNION或UNION ALL多个行,你必须包括一个FROM......即使你不是从数据源中引用的任何字段。

我创建了一个只有一行的表,并添加了一个检查约束以确保它始终只有一行。Public Sub CreateDualTable()

Dim strSql As String

strSql = "CREATE TABLE Dual (id COUNTER CONSTRAINT pkey PRIMARY KEY);"

Debug.Print strSql

CurrentProject.Connection.Execute strSql

strSql = "INSERT INTO Dual (id) VALUES (1);"

Debug.Print strSql

CurrentProject.Connection.Execute strSql

strSql = "ALTER TABLE Dual" & vbNewLine & _

vbTab & "ADD CONSTRAINT there_can_be_only_one" & vbNewLine & _

vbTab & "CHECK (" & vbNewLine & _

vbTab & vbTab & "(SELECT Count(*) FROM Dual) = 1" & vbNewLine & _

vbTab & vbTab & ");"

Debug.Print strSql

CurrentProject.Connection.Execute strSqlEnd Sub

该Dual表对于以下查询很有用:SELECT "foo" AS my_textFROM DualUNION ALLSELECT "bar"FROM Dual;

我见过的另一种方法是使用SELECT带有TOP 1或WHERE子句的语句,将结果集限制为单行。

注意检查约束是随Jet 4添加的,仅可用于从ADO执行的语句。CurrentProject.Connection.Execute strSql之所以有效,CurrentProject.Connection是因为它是一个ADO对象。如果尝试使用DAO执行同CurrentDb.Execute一条语句(即从Access查询设计器或从Access查询设计器执行),则会收到语法错误,因为DAO无法创建检查约束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值