sql-server – 锁定CREATE TABLE
发布时间:2021-03-31 20:08:38 所属栏目:MsSql教程 来源:网络整理
导读:在另一个应用程序中,我被糟糕的设计所震撼:多个线程同时执行Ensure DatabaseSchemaExists()方法,看起来基本上是这样的: IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN CREATE TABLE MyTable (
|
在另一个应用程序中,我被糟糕的设计所震撼:多个线程同时执行Ensure DatabaseSchemaExists()方法,看起来基本上是这样的: IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN
CREATE TABLE MyTable ( ... );
END
但是,即使在SERIALIZABLE事务中执行,此代码似乎也不是线程安全的(即并行代码尝试多次创建表).有没有机会强制SELECT语句获取一个锁,以防止另一个线程执行相同的SELECT语句? 多线程 – EnsureSchemaExists()方法有更好的模式吗? 解决方法您最好的选择是使用显式包含事务并获取自定义独占锁以保护整个操作(SELECT和CREATE TABLE) using sp_getapplock.系统对象不遵循隔离级别请求并以与用户表相同的方式使用锁定,通过设计.原始代码中的竞争条件是,在任何线程获得CREATE TABLE语句之前,多个线程可以断定该表不存在. (编辑:天瑞地安资讯网_黄海网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 更改数据库默认排序规则时的Latin1_General_
- SQL:使用IN子句将字符串转换为IDS
- SQL Server:带XML输出的两级GROUP BY
- sql-server – 使用GUI恢复数据库 – 要恢复的文件错误
- sql-server – 恢复数据库,不包括FILESTREAM数据
- 后缀:错误:打开数据库/etc/postfix/generic.db:没有这样
- 关于XHTML的H1标记的位置
- HTML+Sass实现HambergurMenu(汉堡包式菜单)
- sql – 使用Max()函数选择组值
- sql-server – 将一组行转换为SQL Server 2000中的列
站长推荐
热点阅读


