如何在无写入权限的ACCESS中模拟SQL Server的VALUES功能?
Access中替代VALUES子句实现查询的方法
要在无写入权限的Access环境中,找出指定值列表里不存在于co_wtr表Quad字段中的值,可以用以下方法:
方法一:用UNION ALL构造虚拟行集
Access支持通过UNION ALL拼接多个单值查询来模拟SQL Server中VALUES子句的行集合效果,无需创建实体表,完全符合无写入权限的要求。
对应的SQL语句如下:
SELECT v.val FROM ( SELECT 'MONTROSE' AS val UNION ALL SELECT 'STERLING' AS val UNION ALL SELECT 'GREELEY' AS val UNION ALL SELECT 'FRED' AS val UNION ALL SELECT 'BILL' AS val ) AS v LEFT JOIN co_wtr t ON t.Quad = v.val WHERE t.Quad IS NULL;
原理说明
- 每个
SELECT 'xxx' AS val生成一行单值数据,通过UNION ALL将这些行合并成一个临时的虚拟数据集v。 - 后续的
LEFT JOIN和WHERE t.Quad IS NULL逻辑与原SQL Server查询完全一致,筛选出虚拟数据集中未在co_wtr.Quad中出现的值。
补充说明
如果需要检查的值数量较多,这种写法会稍显繁琐,但这是Access环境下无需写入权限的最直接解决方案。若允许使用VBA自定义函数,也可以通过字符串拆分生成行集,但需要确保数据库允许启用VBA功能。
内容的提问来源于stack exchange,提问作者BartAtRanch
相关产品推荐
相关产品推荐

