代码之家  ›  专栏  ›  技术社区  ›  igorgue

桌子在用吗?

sql
  •  1
  • igorgue  · 技术社区  · 17 年前

    如何确定表是否在SQL中使用(在任何类型的数据库上)?如果有人已经在使用它,或者让它“打开”,那么它就在使用中。

    3 回复  |  直到 17 年前
        1
  •  4
  •   Jonathan Leffler    17 年前

    一般来说,要想知道别人是否在使用这张桌子,并阻止你做任何你想做的事情,正确的方法是尝试做你想做什么,并检查它是否失败。如果失败消息指示“非独占访问”或“正在使用的表”或等效信息,则您猜错了。

    如果你的DBMS支持表锁,你可以对表应用锁,然后执行一系列操作,但你会阻碍其他可能试图使用它的人。

    请注意,签入锁表(如syslockinfo)既特定于DBMS,又不可靠,这会导致TOCTU(检查时间、使用时间)问题。

        2
  •  2
  •   Chris Ballance    17 年前

    检查桌子上的锁是否打开。

    查看syslockinfo表。

        3
  •  0
  •   Jonathan Leffler    17 年前

    实际上,这会给你一个更好的结果:

    select spid
        from master..sysprocesses
        where dbid = db_id('Works') and spid <> @@spid