小编D.R*_*.R.的帖子

锁定创建表

在另一个应用程序中,我被糟糕的设计震惊了:多个线程EnsureDatabaseSchemaExists()同时执行一个方法,它看起来基本上是这样的:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN

    CREATE TABLE MyTable ( ... );

END
Run Code Online (Sandbox Code Playgroud)

但是,即使在 SERIALIZABLE 事务中执行,此代码似乎也不是线程安全的(即并行代码尝试多次创建表)。是否有机会强制 SELECT 语句获取阻止另一个线程执行相同 SELECT 语句的锁?

是否有更好的多线程 EnsureSchemaExists() 方法模式?

sql-server sql-server-2012 locking

19
推荐指数
2
解决办法
1424
查看次数

标签 统计

locking ×1

sql-server ×1

sql-server-2012 ×1