sql-server – 强制SET IDENTITY_INSERT从MS Access更快地生效

我正在努力将一套MS Access后端数据库升级sql Server.我编写了sql脚本来在sql Server中创建表模式.现在我正在尝试填充表格.大多数表都有自动编号主键.这是我的一般方法
For each TblName in LinkedTableNames
    'Create linked table "temp_From" that links to the existing mdb'
    'Create linked table "temp_To" that links to the new sql server table
    ExecutePassthru "SET IDENTITY_INSERT " & TblName & " ON"
    db.Execute "INSERT INTO temp_To SELECT * FROM temp_From",dbFailOnError
    ExecutePassthru "SET IDENTITY_INSERT " & TblName & " OFF"
Next TblName

第一次插入立即发生.后续插入尝试失败并显示错误:“当IDENTITY_INSERT设置为OFF时,无法在表’TblName’中为标识列插入显式值.”

我为该特定错误添加一个Resume语句,还添加一个计时器.事实证明,错误持续了600秒(十分钟),然后插入成功.

MS Access是否每10分钟自动刷新一次ODBC会话?有没有办法强迫它发生得更快?我错过了一些明显的东西吗

那些立即想要说“使用升迁向导”的人的背景信息:
我没有使用内置的升迁向导,因为我需要能够从头到尾编写整个操作的脚本.目标是在客户端位置执行交换机之前使其在测试环境中运行.

解决方法

我找到了第一个问题的答案.十分钟是Jet引擎密钥下注册表中的一个设置:
'Jet WinXP/ Win7 32-bit:'
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\ODBC\ConnectionTimeout

'Jet Win7 64-bit:'
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\ODBC\ConnectionTimeout

'ACE WinXP/ Win7 32-bit:'
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Access Connectivity Engine\Engines\ODBC\ConnectionTimeout

'ACE Win7 64-bit:'
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MicrosoftAccess Connectivity Engine\Engines\ODBC\ConnectionTimeout

ACE为documented here

ConnectionTimeout: The number of seconds a cached connection can remain idle before timing out. The default is 600 (values are of type REG_DWORD).

此密钥设置为认值600.这是600秒或10分钟.我把它减少到十秒钟,代码加速了.

这绝不是完整的解决方案,因为设置低的认值肯定会在其他地方引起问题.事实上,Tony Toews once recommended在使用无DSN连接时可能会更好地提高认值.

我仍然希望找到问题第二部分的答案,即有没有办法强制刷新更快.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...