为什么 DROP TABLE 在 SELECT INTO 之前似乎没有生效?

2023-11-21

下面的 SQL 查询让我感到困惑:

select 1 as FIELD into #TEMP
drop table #TEMP
select 1 as FIELD into #TEMP

When I run it from SQL Server Management Studio session window (pressing F5 to the whole query, as a group), I get the following error:

消息 2714,第 16 级,状态 1,第 3 行
数据库中已有一个名为“#TEMP”的对象。

注意该表#TEMP在执行查询之前不存在。

我认为代码不应该产生任何错误,因为第 2 行正在删除临时表。但执行第 3 行时,好像 drop 并未生效。

我的问题:

  1. 为什么会发生错误?
  2. 如何修复查询,使其按预期执行?

附言。上面的查询是我的现实世界查询的简化,它显示出相同的症状。

PS2。不管这是否是一个合理的编程实践(正如 Sean 在他的评论中暗示的那样),这种意想不到的行为促使我寻找有关如何解析这些查询的信息,希望这些知识将来对我有所帮助。


我发现现有表的查找是不同的:

select 1 as FIELD into #TEMP
drop table #TEMP

当你使用into这些命令之后的语句:

select 1 as FIELD into #TEMP

错误是:

数据库中已有一个名为“#TEMP”的对象。

当你使用select on #TEMP在这些命令之后:

select * from #TEMP

错误是:

对象名称“#TEMP”无效。

所以,在第一种情况下,有一个对象#TEMP名称,在另一种情况下,没有一个对象#TEMP name !.

来自的重要说明technet.microsoft is:

DROP TABLE 和 CREATE TABLE 不应在同一批处理中的同一表上执行。否则可能会出现意外错误。


在通过 SQL Server 数据库引擎删除表的注释中:

SQL Server 数据库引擎将实际的页释放及其关联的锁推迟到事务提交之后。

所以使用时出现第二个错误select声明可能涉及实际的页面释放以及使用时的第一个错误into声明可能涉及关联锁与事务提交之间的持续时间.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 DROP TABLE 在 SELECT INTO 之前似乎没有生效? 的相关文章

随机推荐

  • iOS 分发证书过期会怎样?

    我现在正在向 iTunes connect 提交 iPhone 应用程序 我有一个关于分发证书的问题 如果分发证书过期会发生什么 用户购买的应用程序在证书过期后会停止运行或崩溃吗 或者分发证书过期后用户无法安装应用程序或无法从App Sto
  • 是否可以在不使用偏移量的情况下将指针存储在共享内存中?

    当使用共享内存时 每个进程可以将共享区域映射到其各自地址空间的不同区域 这意味着当在共享区域中存储指针时 您需要将它们存储为偏移量共享区域的开始 不幸的是 这使原子指令的使用变得复杂 例如 如果您尝试编写一个无锁算法 例如 假设共享内存中有
  • 如何使用 Bing 地图检索邮政地址的纬度和经度?

    我希望能够检索给定地址的地理坐标 纬度和经度 我希望如果我有完整的地址 街道地址 城市 州 邮政编码 我可以做到这一点 如果重要的话 我正在使用 Bing 地图 我得到的框架代码是这样的 fullAddress AddPushpin 和 g
  • 使用node.js读取Excel文件

    好的 所以我正在使用FileUploader将我的文件从 Angular 上传到我的模块REST API var uploader scope uploader new FileUploader url api getUrl uploadC
  • JavaScript:如何找出浏览器窗口中视口的宽度和高度?

    如何找出浏览器窗口中视口的宽度和高度 如何找出有多少文档向下和向右滚动 尝试这个函数 并在需要时调用它 function getViewPortSize var viewportwidth var viewportheight Standa
  • Emberjs 异步路由

    我的问题与问题相关 1183 and 1268emberjs 的 我在路线上有动态元素 如果我通过应用程序导航 一切都可以 问题是当我重新加载页面或输入网址时 在这种情况下 应用程序进入反序列化函数并通过其 id 加载和对象 但此加载是异步
  • 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

    什么是ArrayIndexOutOfBoundsException意思是我该如何摆脱它 下面是触发异常的代码示例 String names tom bob harry for int i 0 i lt names length i Syst
  • 存储过程返回错误的标量值 -1,而不是返回值

    我正在尝试从存储过程返回标量值 我实际上想返回新创建的记录的 ID 但我已将问题简化为需要一个存储过程int并尝试返回相同的内容int 这始终返回 1 非常感谢您的帮助 Web API 控制器调用 var idtest dbconn my
  • 使 JComponent 适合/缩放到正在打印的页面

    我正在尝试缩放我的组件 以便它可以适合单个打印页面 纵向或横向 gDiagram getComponent 是我要打印的组件 JPanel 这是我到目前为止所得到的基于如何打印单个 JPanel 的内容 Prints the diagram
  • 如何使用重载的显式转换运算符?

    我在 C 中定义了一个类型 如下所示 struct F public static explicit operator F long value public static explicit operator long F value pu
  • 将 Python 项目提交到 Dataproc 作业

    我有一个 python 项目 其文件夹具有以下结构 main directory lib lib py run script py script py is from lib lib import add two spark SparkSe
  • 用Java模拟文件

    我正在尝试为采用字符串文件名的方法编写单元测试 然后打开文件并从中读取 因此 为了测试该方法 我考虑编写一个文件 然后调用我的方法 但是 在构建场中 不可能将文件任意写入磁盘 是否有一种标准方法可以在单元测试中 模拟 真实文件 我发现Moc
  • JavaFX - 使 ScrollPane 自动滚动

    我在 ScrollPane 中有一个标签 我正在循环中更新标签 在另一个线程中 如果用户没有将 ScrollPane 保持在某个位置 如何更新 ScrollPane 使其向下滚动 不是横向滚动 这将手动完成 有一个设置器吗 要将 Scrol
  • 如何隐藏操作栏中的向上按钮

    我想做一个编辑模式 采用平板电脑 Gmail 应用程序的风格 如果用户按下操作栏上的编辑按钮 我想向他 她显示一个操作视图 该视图左侧有一个完成按钮 右侧有一个删除按钮 我这里有一个无需 actionbarsherlock 即可工作的示例
  • 如何正确实现 IDisposable

    作为一名开发人员 我见过很多 C 代码 它们试图通过将变量设置为 null 或在自己的类 Dispose 方法中调用类 例如 DataSet 上的 Dispose 来帮助 GC 我一直想知道是否需要在托管环境中实施它 这段代码的设计模式是否
  • Rails javascript 仅在重新加载后才起作用

    问题正是标题所说的 javaScript 位于资产管道中 即 assets javascripts myfile js coffee 在 application js 中我有 require jquery require jquery uj
  • 我们如何获取 IAM 用户、他们的组和策略?

    我需要获取所有 aws 用户及其相应的组 策略 然后获取是否为他们激活了 MFA 谁能告诉我如何通过 aws cli 或 boto 来完成它 我有一个脚本可以提取 aws 中的所有用户 import boto3 from boto3 imp
  • 猫鼬精益查询,虚拟值未显示

    我在猫鼬上设置了以下架构 我使用版本 3 6 17 var PostSchema new Schema id type String required true index unique true video type String def
  • 如何从浅克隆中有效地进行 git fetch

    We use git 分发操作系统并使其保持最新 我们无法分发完整的存储库 因为它太大 gt 2GB 因此我们一直使用浅克隆 300M 然而最近 当从浅克隆中获取时 它现在无法有效地获取整个 gt 2GB 存储库 这是对部署带宽的一种难以忍
  • 为什么 DROP TABLE 在 SELECT INTO 之前似乎没有生效?

    下面的 SQL 查询让我感到困惑 select 1 as FIELD into TEMP drop table TEMP select 1 as FIELD into TEMP When I run it from SQL Server M