代码之家  ›  专栏  ›  技术社区  ›  Serkan Hekimoglu

T-Sql算法问题

  •  2
  • Serkan Hekimoglu  · 技术社区  · 15 年前

    我有一个T-Sql语句,如下所示;

    Insert into Table1
    Select * From Table2
    

    这是一个普通的存储过程,不使用任何事务。

    2 回复  |  直到 15 年前
        1
  •  2
  •   AakashM    15 年前

    回应@codebymonlight的回答,并在这里发表你的评论:the 注意事项(包括锁定的细节)总是从属于 符合逻辑的 查询指定的指令。

    在处理 INSERT ... SELECT 声明, 从逻辑上讲 这个 SELECT INSERT 在这种情况下,源表和目标表是同一个表是不相关的。我很确定 NOLOCK TABLOCK 选择 ,如果你把它们放在那里。

    再举一个例子,如果你以“命令”的方式阅读这句话,那就没有意义了:

    UPDATE SomeTable
    SET Column1 = Column2, Column2 = Column1
    

    Column1 Column2 对所有行具有相同的值。但事实上不是 互换 第1栏 第2栏 . 只有理解到 符合逻辑的 查询的指令指示实际发生了什么可以看到。

        2
  •  3
  •   onedaywhen    15 年前

    你所拥有的事实上是一个单一的陈述。它只会在开始插入时将表2中的记录插入到表2中。否则的话 ACID 不会应用,并且您会遇到隔离(如果sp同时运行两次会怎样)和持久性问题。SQL Server将通过锁定强制执行此操作。