我有一个到SQL Server的ODBC连接。我需要在Access中处理数据,但这需要很长时间。我的想法是将这些数据推送到SQL Server临时表并让SQL Server执行处理。我在Access数据库中有许多传递查询,但不知道如何从Access到SQL Server创建临时表。有没有办法使用查询或VBA代码来做到这一点?如何通过MS Access在SQL Server中创建临时表
回答
这是我用来调用DB2存储过程的VBA代码片段。相同的技术应该适用于任何DDL语句。为此,创建一个传递查询并将您的CREATE TABLE #tblname...
语句作为其SQL文本。
重要提示:然后打开查询的属性表并将'Returns Records'属性设置为“No”。
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("qry_SP_CHANGE_COLUMN")
qdf.Connect = CurrentDb.TableDefs("SCHEMA_tblName").Connect
qdf.SQL = "call SCHEMA.SP_CHANGE_COLUMN(...)"
qdf.Execute dbFailOnError
qdf.Close
Set qdf = Nothing
请注意,您可能不必更改您的SQL文本。如果表结构不改变,你可以把它留在查询def中。
您面临的挑战是您必须对临时表执行任何操作时使用相同的连接。连接关闭一分钟后,临时表将消失,因为它是一个本地临时表,并且只有该连接才可见。如果您有权这样做,您可以通过使用'##'全局临时表来避免这种情况。
Brian是正确的,您可以使用Pass-Through查询在SQL Server数据库中创建一个临时表。我在Access中创建以下四个传递查询证实了这一点:
[ptq1创建临时表]
BEGIN TRY
DROP TABLE #tblname
END TRY
BEGIN CATCH
-- do nothing
END CATCH
CREATE TABLE #tblname (intInput int, intResult int);
[ptq2填入临时表]
INSERT INTO #tblname (intInput) VALUES (1)
[ptq3做计算]
UPDATE #tblname SET intResult=intInput*2
[ptq4检索结果]
SELECT * FROM #tblname
我可以连续双击它们保存的查询访问列表运行其中的每个,而最终查询返回
intInput IntResult
-------- ---------
1 2
的绊脚石这里看起来会怎样从本地Access表获取数据到的临时表中。在VBA我都尝试
DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DSN=myDB", acTable, "#tblname", "sqlTemp"
和
Set tbd = cdb.CreateTableDef("sqlTemp")
tbd.Connect = "ODBC;DSN=myDb;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=myDb;"
tbd.SourceTableName = "#tblname"
cdb.TableDefs.Append tbd
而且这两种方法失败了,因为他们无法“看”到临时表。 (当我尝试在同一个SQL Server数据库中创建一个到“真实”表的链接时,完全相同的代码工作)。我也尝试使用tbd.OpenRecordset
创建一个记录集,但没有将TableDef附加到TableDefs集合,也失败了。
没有链接到临时表,似乎填充它可能有问题。我想一个可能使用代码像...
Set rst = cdb.OpenRecordset("localTable", dbOpenSnapshot)
Do While Not rst.EOF
Set qdf = cdb.CreateQueryDef("", "INSERT INTO [#tblname] (intInput) VALUES (" & rst!intInput & ")")
qdf.Connect = "ODBC;DSN=myDb;Trusted_Connection=Yes;DATABASE=myDb;"
qdf.ReturnsRecords = False
qdf.Execute dbFailOnError
Set qdf = Nothing
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
...从本地表中的数据传送到临时表的行由行,但可能获得大量列的也很单调乏味,而且它可能是一个大而慢行数。
所以,如果我在你的位置,我会尝试让我的情况下,在SQL Server数据库中创建一个“真实”的表。它肯定会让事情变得更简单。
- 1. 选择MS Access表到SQL临时表
- 2. 从SQL Server中的临时表创建临时视图
- 3. 如何在sql server 2008 R2数据库中创建临时表?
- 4. 通过SQL在ms-access中为Double创建一列
- 5. 在SQLSRV中创建MS SQL临时表PHP中的PDO
- 6. 如何以编程方式使用SSIS在SQL Server中创建MS Access表?
- 7. SQL Server通过存储过程将表返回到MS Access
- 8. 如何使用SQL Server中的Create语句创建临时表?
- 9. 在SQL中实时创建临时表
- 10. 如何在MS Access中使用SQL创建表的子集
- 11. 在MS Access上保存临时表格
- 12. sql server 2012在存储过程中创建临时视图
- 13. 创建MS SQL Server 2008中
- 14. 使用Excel宏(ADODB)在SQL Server 2008中创建临时表
- 15. 使用C#和MS Access创建表SQL
- 16. 如何通过MS ACCESS表执行SQL Server表的批量更新
- 17. SQL Server存储过程创建临时表和插入值
- 18. 在MS Access中创建存储过程?
- 19. SQL Server,在TSQL中创建临时表的问题
- 20. 是否需要使用#来在SQL Server中创建临时表?
- 21. 从VBScript在SQL Server 2008中创建临时表
- 22. MS Access锁定SQL Server中的表?
- 23. 在SQL中创建临时表
- 24. 在sql server中使用xml.nodes函数创建临时表
- 25. 在Python脚本中创建SQL Server临时表
- 26. 通过JDBC创建的SQL Server全局临时表不会持久
- 27. 如何在SQL Server中的ELSE IF语句中创建相同的临时表?
- 28. 在MS Access中创建“Winform”
- 29. 在MS Access中创建秒表
- 30. 在MS-Access中创建条件表
您是否可以通过在服务器上手动创建常规表来绕过该问题? – PowerUser
我可以但我不希望这个请求会被拒绝。但我有权创建临时表。 – Luke101