【问题标题】:Pass-through queries and linked table queries using different connections使用不同连接的直通查询和链接表查询
【发布时间】:2011-08-09 17:25:18
【问题描述】:

继续前面的问题:Force SET IDENTITY_INSERT to take effect faster from MS Access

我正在从 MS Access 后端升级到 SQL Server 后端。许多表都有自动编号的主键。我正在尝试按如下方式填充它们(伪代码):

ExecutePassThru "SET IDENTITY_INSERT dbo.Accounts ON"
db.Execute "INSERT INTO sql_Accounts SELECT * FROM mdb_Accounts"
ExecutePassThru "SET IDENTITY_INSERT dbo.Accounts OFF"

在上面的代码中,sql_Accounts是连接到SQL Server中Accounts表的链表,mdb_Accounts是连接到mdb中Accounts表的链表。这失败并出现错误,

当 IDENTITY_INSERT 设置为 OFF 时,无法为表“Accounts”中的标识列插入显式值。

我启动了 SQL Server Profiler 来尝试找出问题所在,问题是我的示例中的每一行代码可能使用也可能不使用不同的服务器进程 ID (SPID)。换句话说,他们使用不同的后端连接。

有什么方法可以确保它们都使用相同的连接吗?

【问题讨论】:

  • 到 SQL Server 的单个 ADO 连接可以让您设置 IDENTITY_INSERT 并一次插入一行。这是一种改进吗?
  • 也许吧。我认为这是因为这就是 Access 在幕后实际所做的。在我重构一大堆代码之前,我希望有一个更简单的修复,但这可能是我唯一的选择。
  • 我刚遇到SQL Server Migration Assistant (SSMA)。它看起来很有希望,但它目前坚持让我安装 Access 2010 运行时来使用它。我知道 2010 运行时是免费安装的,但我宁愿不必在我的开发机器上使用多个版本的 Access。
  • 我没有看到列出的要求;也许是为了满足“DAO 提供程序版本 12.0 或 14.0。您可以从 Microsoft Office 2010/2007 产品安装 DAO 提供程序或从 Microsoft 网站下载它。”我认为您可以单独安装ACE。但是……这是您打算在客户所在地做的事情吗?
  • 我尝试只安装 Access 数据库引擎 Redistributable,但这还不够。我目前正在根据您的第一条评论实施您的建议。当我取得进展时,我会尝试发布更新。

标签: sql-server ms-access odbc database-connection connection-pooling


【解决方案1】:

可能有更优雅的解决方案,但这是一次性转换,不值得深入尝试通过连接重用来完成复杂的事情。

  1. 在 SQL Server 上创建一个不包含标识但在其他方面具有相同架构的临时表。
  2. 将数据加载到该表中
  3. 您的身份完全插入到 SQL Server 端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2020-01-05
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多