首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用更改的WHERE子句访问直通查询

使用更改的WHERE子句访问直通查询
EN

Stack Overflow用户
提问于 2015-05-23 06:42:57
回答 2查看 1.2K关注 0票数 0

这更具概念性。我有一个当前在SQLServer中运行的查询,我想在Access中将其转换为直通查询。然而,这是一个巨大的查询,它必须由带有我想要的ID#s的WHERE子句限制(有太多的ID#s不能没有WHERE子句;它会冻结)。我需要的ID#s每天都会改变,所以我不能只设置一次就可以完成。

所以我真的不知道如何获取它,所以用户要么1.导入一个带有当天的ID#s的表,该表链接到直通,要么2.用户将ID#s粘贴到输入框中,这些条件将成为WHERE子句条件。

据我所知,我不能使用直通的ID#s连接Access中的表,也不能在直通的WHERE部分使用WHERE ID# = table.ID#。去掉直通中的WHERE,然后在与access表连接的地方执行一个简单的select查询也不起作用,因为查询需要很长的时间才会超时。

这是可能的吗?或者我应该探索完全不同的策略?

EN

回答 2

Stack Overflow用户

发布于 2015-05-23 14:27:25

在SqlServer中将查询构建为返回数据并接受参数的存储过程。构建一个从用户那里请求ID的表单,或者如果可能的话,构建一个获取这些ID的函数。将存储过程中的参数设置为WHERE子句中所需的in。

您可以使用querydefs重新定义查询的SQL,如下所示

代码语言:javascript
运行
复制
CurrentDb.QueryDefs("myAccessQueryPassT").sql = 
     "EXEC mySqlServerStoredProc (" & par1 & ", " & par2 & ")"

其中par1,par2,..。par(n)是要过滤的ID。

然后,您可以像往常一样运行msAccess查询:

代码语言:javascript
运行
复制
SELECT * FROM myAccessQueryPassT

请注意,您还可以在SqlServer (mySqlServerView)中定义一个未过滤的视图,然后在直通中(在本例中我只包含一个参数,当然您还可以包含更多参数):

代码语言:javascript
运行
复制
CurrentDb.QueryDefs("myAccessQueryPassT").sql = 
"SELECT * 
FROM mySqlServerView 
WHERE ID = " & par1 & ")"

当然,您也可以始终以动态方式构建整个查询,在这种情况下,它将如下所示:

代码语言:javascript
运行
复制
CurrentDb.QueryDefs("myAccessQueryPassT").sql = "SELECT ... FROM ... WHERE..."

与之前相同,您可以查询透传:

代码语言:javascript
运行
复制
SELECT * FROM myAccessQueryPassT
票数 0
EN

Stack Overflow用户

发布于 2015-05-23 16:32:13

当我有奇怪的直通查询时,我使用另一种技术

首先,我创建了一个虚拟的直通查询,其中所有主观的内容都由虚拟常量表示

例如,如果我有年的改变,我有一个虚拟的1900年,我使用替换来改变它为我需要的任何东西

然后,将更改后的SQL传递给另一个传递,该传递充当

所以我的代码是这样的

代码语言:javascript
运行
复制
Const DummyToReplace = "1900"
Dim strSql as String
Dim qdf as QueryDef
strsql = vbnullstring
set qdf = currentdb.QueryDefs(SourceDummyPassThroughQry)
strsql = qdf.SQL
set qdf = nothing
strsql = replace(strSql,DummyToReplace ,TheCriteriaYouwantToPass)
set qdf = currentdb.QueryDefs(ModifiedPassThrough)
qdf.SQL = strsql
set qdf=nothing

此时,您既可以执行ModifiedPassThrough,也可以将其用作RecordSource。在可以使用字符串拆分将SQL拆分为两部分的情况下

第1部分至何处例如

代码语言:javascript
运行
复制
 strSql = SELECT * from my TABLE WHERE

第二部分只需将Where标准

代码语言:javascript
运行
复制
  WhereCriteria = " ID IN (Various IDs)"

因此,您可以将它们连接在一起,并将它们提供给修改后的传递

代码语言:javascript
运行
复制
qdf.SQL = strsql & " " & WhereCriteria

剩下的都很简单

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30406899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档