Sql 这张桌子在用吗?

Sql 这张桌子在用吗?,sql,Sql,如何确定表是否在SQL中使用(在任何类型的数据库上)?如果有人已经在使用它,或者让它“打开”,那么它正在使用中。检查桌子上是否有打开的锁 查看syslockinfo表。检查表上是否有打开的锁 查看syslockinfo表。一般来说,了解是否有其他人在使用该表并阻止您做任何您想做的事情的正确方法是尝试做您想做的事情并检查它是否失败。如果失败消息指示“非独占访问”或“正在使用的表”或等效项,则您猜错了 如果您的DBMS支持表锁定,那么您可以对表应用锁,然后执行一系列操作,但这会妨碍其他人尝试使用它

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

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


查看syslockinfo表。

检查表上是否有打开的锁


查看syslockinfo表。

一般来说,了解是否有其他人在使用该表并阻止您做任何您想做的事情的正确方法是尝试做您想做的事情并检查它是否失败。如果失败消息指示“非独占访问”或“正在使用的表”或等效项,则您猜错了

如果您的DBMS支持表锁定,那么您可以对表应用锁,然后执行一系列操作,但这会妨碍其他人尝试使用它


请注意,在锁表(如syslockinfo)中进行检查是DBMS特有的且不可靠的-它会导致TOCTU(检查时间、使用时间)问题。

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

如果您的DBMS支持表锁定,那么您可以对表应用锁,然后执行一系列操作,但这会妨碍其他人尝试使用它


请注意,检入锁表(如syslockinfo)是DBMS特有的且不可靠的—它会导致TOCTOU(检查时间、使用时间)问题。

实际上,这会给您带来更好的结果:

select spid
    from master..sysprocesses
    where dbid = db_id('Works') and spid <> @@spid
选择spid
来自主进程..系统进程
其中dbid=db_id('Works')和spid@@spid

实际上,这会给您带来更好的结果:

select spid
    from master..sysprocesses
    where dbid = db_id('Works') and spid <> @@spid
选择spid
来自主进程..系统进程
其中dbid=db_id('Works')和spid@@spid

有很多种“用途”。您的意思是该表正在被程序访问(DML=insert、update、delete、select)?您的意思是表结构正在修改(DDL)?您的意思是该表被“活动”应用程序中的某个SQL语句引用了吗?是的,通过程序访问、插入、更新、删除、选择或简单的BEGIN事务(在MS SQL Server中)有多种“用途”。您的意思是该表正在被程序访问(DML=insert、update、delete、select)?您的意思是表结构正在修改(DDL)?您的意思是该表被“活动”应用程序中的某个SQL语句引用了吗?是的,由程序访问、插入、更新、删除、选择或简单的开始事务(在MS SQL Server中)谢谢,这让我找到了正确的答案:对于MS SQL Server谢谢,这让我找到了正确的答案:对于MS SQL Server