我有一些SQL Compact查询在事务中创建表。这主要是因为我需要模拟SQL Compact不支持的临时表。我这样做是通过创建一个真实的表,然后在事务结束时删除它。
这大部分都有效。但是,有时,在创建表时,Sql Compact将尝试获取__sysobjects表上的PAGE级别锁。如果有多个并发查询在运行时创建“临时”表,则获取页锁的尝试可能导致死锁,然后是SqlLockTimeout异常。
对于普通表我可以使用“with(rowlock)”提示修复此问题。但是,因为我没有编写要插入__sysobjets的查询(SQL服务器执行该操作以响应“create table”),所以我不能这样做。
有谁知道我可以解决这个问题?
我考虑过将表创建从事务中拉出来,但这开启了幻像临时表的可能性,然后我需要定期清理它。理想情况下,如果可能,我想避免这种情况。
答案 0 :(得分:-1)
我认为你必须在创建常规表而不是#temp表时遇到并发问题。
我不知道SQL Server Compact版本不允许您创建#Temp表。
如何使用Table变量?这对你有用吗?