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_MACHINESOFTWAREMicrosoftJet4.0EnginesODBCConnectionTimeout 'Jet Win7 64-bit:' HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftJet4.0EnginesODBCConnectionTimeout 'ACE WinXP/ Win7 32-bit:' HKEY_LOCAL_MACHINESOFTWAREMicrosoftAccess Connectivity EngineEnginesODBCConnectionTimeout 'ACE Win7 64-bit:' HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftAccess Connectivity EngineEnginesODBCConnectionTimeout ACE为documented here:
此密钥设置为默认值600.这是600秒或10分钟.我把它减少到十秒钟,代码加速了. 这绝不是完整的解决方案,因为设置低的默认值肯定会在其他地方引起问题.事实上,Tony Toews once recommended在使用无DSN连接时可能会更好地提高默认值. 我仍然希望找到问题第二部分的答案,即有没有办法强制刷新更快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |