我有一些在事务内创建表的SQL Compact查询。这主要是因为我需要模拟临时表,而SQL Compact不支持临时表。为此,我创建了一个真实的表,然后在事务结束时删除它。
这基本上是可行的。但是,有时在创建表时,Sql Compact会尝试获取__sysobjects表上的页级锁。如果有多个并发查询正在运行创建“临时”表,则尝试获取页锁定可能会导致死锁,随后会出现SqlLockTimeout异常。
对于普通的表,我可以使用"with (rowlock)“提示来解决这个问题。但是,因为我没有编写插入到__sysobjets中的查询(SQL server在响应"create table“时会这样做),所以我不能这样做。
有没有人知道我有什么办法可以解决这个问题?
我考虑过将表创建从事务中删除,但这可能会产生幻影临时表,然后我需要定期清理这些临时表。理想情况下,如果可能的话,我希望避免这种情况。
发布于 2009-09-06 02:29:14
我认为您在创建常规表而不是#temp表时肯定会遇到并发问题。
我不知道SQL Server Compact edition不允许您创建#Temp表。
改用表变量怎么样?这对你有用吗?
https://stackoverflow.com/questions/1384614
复制相似问题