如何在Access数据库中的所有表上运行相同的查询?

时间:2017-11-14 14:55:53

标签: sql ms-access ms-access-2010

所有表的结构都具有相同的列名。

这是一段代码:

UPDATE Table1 INNER JOIN TableX ON Table1.Column1= TableX.Column1 SET Table1.Column2 = TableX.Column2

但我想在所有表上运行此代码:Table2,Table3,Table4 .... Table30

4 个答案:

答案 0 :(得分:0)

如果我理解得很好,那对你有用......

SELECT AllTables.*
FROM AllTables
WHERE AllTables.ColumnName_X = AllTables.ColumnName_Y

答案 1 :(得分:0)

或许考虑UNION ALL

SELECT ColumnName_X
FROM table1
WHERE .....
UNION ALL
SELECT ColumnName_X
FROM table2
WHERE .....

根据我的评论,您的要求不明确。

答案 2 :(得分:0)

这里的大多数答案都假定SQL服务器 - 这不是标签,不是此问题的一部分,也无法使用。

如果你的表被命名为table1到table30,那么这应该有效:

Dim strSQL       As String
Dim i            As Integer
Dim strTable     As String

For i = 1 To 10
   strTable = "Table" & i
   strSQL = "update " & strTable & _
            " inner join TableX on " & strTable & ".column1 = TableX.Column1" & _
           " SET " & strTable & ".Column2 = TaxbleX.Column2"
 Debug.Print strSQL

 CurrentDb.Execute strSQL

Next i

答案 3 :(得分:-1)

使用以下查询获取表及其包含特定列(ColumnX)

的表的列表
SELECT
  sys.columns.name AS ColumnName,
  sys.tables.name AS TableName,
  schema_name (sys.tables.schema_Id) as schemaName
FROM
  sys.columns
JOIN sys.tables ON
  sys.columns.object_id = sys.tables.object_id
WHERE
  sys.columns.name = 'ColumnName' 
  --and schema_name (sys.tables.schema_Id) = 'schemaName'

输出:(如果columnX是ID)

ColumnName  TableName   schemaName
ID          MusicApp    dbo
id          employ      dbo

获取ID的值,您可以在#temptable中存储上面的查询输出并使用循环来动态获取

declare @tablename varchar(max)= ''
 declare @count int = 1
 declare @tablecount int= (select count(*) from #temptable)
 while(@count <= @tablecount)
 begin
 set @tablename = (select tablename from #temptable where seqid = @count)
exec ( 'select id from '+@tablename+' ')
set @count = @count + 1
end

希望这可以帮助你:)