代码之家  ›  专栏  ›  技术社区  ›  Scott Wisniewski

SQL压缩和系统对象

  •  0
  • Scott Wisniewski  · 技术社区  · 15 年前

    我有一些在事务内部创建表的sql compact查询。这主要是因为我需要模拟临时表,而sql compact不支持临时表。为此,我创建了一个真正的表,然后在事务结束时删除它。

    这基本上是可行的。但是,有时在创建表时,sql compact会尝试获取sysobjects表上的页级锁。如果有多个创建“temp”表的并发查询正在运行,则尝试获取页锁可能会导致死锁,然后出现sqllocktimeout异常。

    对于普通表,我可以使用“with(rowlock)”提示来解决这个问题。但是,由于我没有编写要插入到SysobJets中的查询(SQL Server这样做是为了响应“create table”),所以我不能这样做。

    有人知道我可以怎样避开这件事吗?

    我曾考虑过将表创建从事务中删除,但这就打开了虚拟临时表的可能性,然后我需要定期清理这些表。理想情况下,如果可能的话,我会尽量避免。

    1 回复  |  直到 15 年前
        1
  •  -1
  •   Raj More    15 年前

    我认为在创建常规表而不是临时表时,您一定会遇到并发问题。

    我不知道sqlservercompactedition不允许您创建临时表。

    改用表变量怎么样?对你有用吗?