Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql循环遍历表上的值_Sql_Ms Access - Fatal编程技术网

Sql循环遍历表上的值

Sql循环遍历表上的值,sql,ms-access,Sql,Ms Access,首先,noob警报!:)) 我需要构造一个在许多表上运行的查询。根据客户代码,表的名称仅在最后一位数字上有所不同。问题是,改变的值不是顺序的,所以循环,如i=1,2,3,。。。不起作用。一个可能的解决方案是将这些值放在另一个表的给定字段上 下面是前两个客户端015和061的代码。前导零必须是必需的 SELECT LnMov2017015.CConta, RsMov2017015.DR, RsMov2017015.NInt, "015" AS CodCli FROM LnMov2017015 IN

首先,noob警报!:))

我需要构造一个在许多表上运行的查询。根据客户代码,表的名称仅在最后一位数字上有所不同。问题是,改变的值不是顺序的,所以循环,如i=1,2,3,。。。不起作用。一个可能的解决方案是将这些值放在另一个表的给定字段上

下面是前两个客户端015和061的代码。前导零必须是必需的

SELECT LnMov2017015.CConta, RsMov2017015.DR, RsMov2017015.NInt, "015" AS CodCli
FROM LnMov2017015 INNER JOIN RsMov2017015 ON LnMov2017015.NReg = RsMov2017015.NReg
WHERE (((LnMov2017015.CConta)="6" And (LnMov2017015.CConta)="7") AND ((RsMov2017015.DR)=9999))

UNION SELECT LnMov2017061.CConta, RsMov2017061.DR, RsMov2017061.NInt, "061" AS CodCli
FROM LnMov2017061 INNER JOIN RsMov2017061 ON LnMov2017061.NReg = RsMov2017061.NReg
WHERE (((LnMov2017061.CConta)="6" And (LnMov2017061.CConta)="7") AND ((RsMov2017061.DR)=9999))

...
因此,对于第一个
SELECT
表名是LnMov2017015,结尾015是值,客户机代码,在不同的表中变化。例如,在第二个
SELECT
表名是LnMov2017061(061),这是表的区别

对于每个客户端代码,有两个表,例如LnMov2017015RsMov2017015LnMov2017061RsMov2017061,用于显示的第二组客户端)

有没有一种方法可以基于上面的示例SQL构建SQL


有人有解决方案的想法吗?:)

显然,可以构建一个查询对象来读取另一个数据库中的数据,而无需建立表链接。刚刚测试过,让我惊讶的是它居然能工作。例如:

从“C:\Users\Owner\June\DOT\Lab\Editing\ConstructionData.accdb”中的[SoilsAgg]中选择*

我已经在VBA中使用此结构来执行删除和更新操作语句。

找到的解决方案:)

谢谢大家的意见

我将使用SLQ访问100个表,而不是链接100个表(受密码保护)

FROM Table2 IN '' ';database=C:\db\db2.mdb;PWD=mypwd'

然后用一个查询将它们全部合并,然后再进行其他操作

您能再描述一下这个问题吗?您可能需要研究动态SQL。更好的长期选择可能是将所有客户放在一个表中,并使用一个字段来准确区分他们。这是一个糟糕的数据库设计,现在你正在为此付出代价。如果我是你,我就不会再浪费时间在解决方法上,把这些表合并到一个表中。根据@JeffUK的评论,我试图想办法拉入
MSysObjects
表,作为获取表名最后两位数字的一种方法,比如
从左边的MSysObjects中选择名称(名称,5)在('LnMov','RsMov')中
,但是每个表都需要更新
FROM
子句。一个表,或者两个表——一个用于RsMove,一个用于LnMove,将是基于给定信息的方法。数据库设计毫无疑问,这是一个同时审核多个db的解决方案。当前选项是每次打开一个会计应用程序,一个客户端。..但将数据库合并为一个数据库不是一个选项:(它工作得很好!但数据库受密码保护。可以在SQL查询中输入密码?通过“合并”您是指联合?联合中的选择行数限制为50行。