当前位置:  开发笔记 > 编程语言 > 正文

T-SQL事务如何不是线程安全的?

如何解决《T-SQL事务如何不是线程安全的?》经验,为你挑选了1个好方法。

以下(已清理的)代码有时会产生以下错误:

无法删除表'database.dbo.Table',因为它不存在或您没有权限.
数据库中已经有一个名为"Table"的对象.

begin transaction  
    if exists (select 1 from database.Sys.Tables where name ='Table') 
        begin drop table database.dbo.Table end 

    Select top 3000 *
    into database.dbo.Table
    from OtherTable
commit

select * from database.dbo.Table

代码可以同时运行多次.谁知道它为什么会破裂?



1> JoshBerke..:

我可以问你为什么先这样做吗?您应该考虑使用临时表或提出另一种解决方案.

我不肯定DDL语句在事务中与DML语句的行为相同,并且看到一篇博客文章有一个奇怪的行为并在DDL中创建存储过程.

请注意,您可能需要验证事务隔离级别并将其设置为Serialized.

编辑

基于快速测试,我在两个不同的连接中运行相同的sql,当我创建表但没有提交事务时,第二个事务被阻止.所以它看起来应该有效.我仍然会警告这种类型的设计.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有