存储过程中 exec 内的临时表的作用域规则是什么?

2024-02-19

比较以下存储过程:

CREATE PROCEDURE testProc1
AS
    SELECT * INTO #temp FROM information_schema.tables
    SELECT * FROM #temp
GO

CREATE PROCEDURE testProc2
AS
    EXEC('SELECT * INTO #temp FROM information_schema.tables')
    SELECT * FROM #temp
GO

现在,如果我跑testProc1,它有效,并且#temp似乎只在该通话期间存在。然而,testProc2似乎根本不起作用,因为我得到了Invalid object name '#temp'而是错误消息。

为什么有区别,以及如何使用临时表SELECT * INTO源表名是否是存储过程的参数并且可以具有任意结构?

请注意,我使用的是 Microsoft SQL Server 2005。


来自博尔:

本地临时表可见 仅在当前会话中...... 临时表会自动生成 当它们超出范围时掉落, 除非使用 DROP 明确删除 桌子

第一个过程和第二个过程之间的区别在于,在第一个过程中,表是在与其选择的相同范围内定义的;在第二个中, EXEC() 在其自己的范围内创建表,因此在这种情况下选择失败......

但请注意,以下方法可以正常工作:

CREATE PROCEDURE [dbo].[testProc3]
AS
    SELECT * INTO #temp FROM information_schema.tables
    EXEC('SELECT * FROM #temp')
GO

它之所以有效,是因为 EXEC 的范围是存储过程范围的子级。当表在父作用域中创建时,它也存在于任何子作用域中。

为了给您一个好的解决方案,我们需要更多地了解您要解决的问题...但是,如果您只需要从创建的表中进行选择,那么在子范围中执行选择就可以了:

CREATE PROCEDURE [dbo].[testProc4]
AS
    EXEC('SELECT * INTO #temp FROM information_schema.tables; SELECT * FROM #temp')
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储过程中 exec 内的临时表的作用域规则是什么? 的相关文章

  • SQL Server - 如何向登录名授予对所有数据库的读取访问权限?

    我需要向新登录授予对服务器上所有 300 个数据库的读取权限 如何在不选中用户映射区域中的 300 个复选框的情况下完成此操作 一种方法是在 SSMS 的查询菜单上设置 结果为文本 然后执行以下命令 它实际上并不进行更改 而是生成一个脚本供
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 如何在存储过程中使用名称求和和分组?

    我想对钱列求和 但我想要状态中的组名称和代码 这是存储过程代码 Sql Server 2008 SELECT um upmoney as money um pId as code um FName as name up status as
  • Linq lambda表达式多对多表选择

    我有三个表 其中两个是多对多关系 Picture 这是中间mm表中的数据 Edit 到这里 我得到正确的 4 行返回 但它们都是相同的结果 我知道我需要返回 4 行 但有不同的结果 return this mediaBugEntityDB
  • Docker exec linux 终端创建别名

    我有一个正在运行且独立的容器 我想在附加到该容器之前创建一个命令别名 当我连接到容器并输入 alias bar foo 创建别名 并可以通过以下方式检查 alias command 但如果我想做同样的事情码头执行者命令即这样 docker
  • 转置和聚合 Oracle 列数据

    我有以下数据 Base End RMSA Item 1 RMSA Item 2 RMSA Item 3 RMSB Item 1 RMSB Item 2 RMSC Item 4 我想将其转换为以下格式 Key Products RMSA RM
  • 在 WHERE 子句中使用可选参数

    我有一个SP ALTER PROCEDURE dbo sp Compare lst varchar 100 frst varchar 100 NULL passportNo varchar 50 NULL AS SELECT FROM db
  • 如何使用外连接和分组依据在查询中包含 NULL 值

    我有两个表 其中包含以下示例数据 Table 1 item name item id item desc 1 apple 2 orange 3 banana 4 grape 5 mango Table 2 user items user i
  • MSSQL:如何使用代码编写存储过程创建脚本?

    我正在尝试使用一个数据库中存在但另一个数据库中不存在的 information schema routines 查询存储过程定义列表 SELECT t1 Routine Definition FROM server1 MyDatabase
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • Oracle中如何选择前100行?

    我的要求是获取每个客户的最新订单 然后获取前100条记录 我编写了一个如下查询来获取每个客户的最新订单 内部查询工作正常 但我不知道如何根据结果获得前 100 名 SELECT FROM SELECT id client id ROW NU
  • 如何使用 Alter Table 在 Access 中创建小数字段?

    我想以编程方式在 MS Access 表中创建一个新列 我尝试过很多排列ALTER TABLE MyTable Add MyField DECIMAL 9 4 NULL 并得到 字段定义中的语法错误 我可以轻松创建一个数字字段Double类
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • 如何从连接字符串中提取数据库名称,而不考虑 RDBMS?

    我正在研究一个不知道正在使用的 RDBMS 的课程 当然 应用程序的其余部分都清楚这一点 连接字符串是此类的输入 我需要数据库名称 无论 RDBMS 如何 如何从连接字符串中提取数据库名称 我读到以下问题 如何使用 SqlConnectio
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • SQL Like 带有子查询

    我怎样才能做到这一点 SELECT FROM item WHERE item name LIKE SELECT equipment type FROM equipment type GROUP BY equipment type 内部子查询
  • If Else 条件的 SQLite 语法

    我正在使用 SQLite 数据库 我的表有一个名为 密码 的文本列 早些时候 为了检索我用来执行简单操作的值select from myTable询问 但现在的要求是 如果Password值不是NULL那么我需要将其显示为 是 或 否 它是
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si

随机推荐

  • 在 python 中,是否有跨平台的方法来确定哪个进程正在侦听给定端口?

    在linux下 我可以使用lsof i如以下函数所示 def FindProcessUsingPort portnum import os fp os popen lsof i s portnum lines fp readlines fp
  • Android 12 模拟器预览版无连接

    我已经安装了 Android 12 Preview 模拟器 我遇到了很多问题 因为模拟器在启动时崩溃 但在卸载并再次安装并重新启动机器等后 我设法启动它 我现在遇到的问题是互联网连接不起作用 所有其他模拟器都工作正常 我尝试从命令行启动模拟
  • Android:向EditText字段添加小数点,并使其随输入移动

    在我的应用程序中 用户可以在文本字段中输入美元金额 问题是 我需要输入在输入数字时适应最终数字 而不实际输入小数点 解释这一点的最好方法是用一个例子 假设用户从包含以下内容的 EditText 字段开始 用户想要在字段中输入 12 53 即
  • 为 Google App Engine 配置 Jackson

    有什么办法可以配置吗Jackson 配置对象映射器 哪个用于序列化 servlet 响应 Api name rates version v1 title Rates API public class RatesApi static Logg
  • 熊猫,按计数分组并将计数添加到原始数据帧?

    当尝试计算数据框中具有相似 种类 的行时 import pandas as pd items aaa aaa text 1 aaa aaa text 2 aaa aaa text 3 bb bb text 1 bb bb text 2 bb
  • 从 D2006 移植到 XE5 后偶发的访问冲突在 XP 兼容模式下不会发生

    我们有一个在 Delphi 2006 中运行良好的大型应用程序 我们已将其移至 XE5 但经常遇到偶发的访问冲突 我们使用 VCL 表单和许多 DevExpress 以及其他第三方组件 我们正在使用 Windows 7 Profession
  • tess-two 找不到 libpng.so

    我已遵循 tess two 的构建说明Github https github com rmtheis tess two build 我使用 NDK 成功构建了 tess two 并导入了库 我正在尝试运行同一存储库上提供的测试应用程序 但每
  • RTC_WAKEUP 不起作用

    目前我正在开发一个广播接收器应用程序 其中我正在制作一个警报 该警报应该在我们输入秒数后显示一条消息 我使用了 RTC WAKEUP 这意味着它应该在设备打开时显示消息 并且应该打开设备 然后在设备关闭时显示消息 我的问题是 RTC WAK
  • 迁移到Material-UI v5时,如何处理条件类?

    In the 官方迁移指南 https next material ui com guides migration v4 main content 他们给出了以下从 JSS 更改代码的示例 makeStyles 到新的styled mode
  • 单元测试因会话窗口中的“构建失败”而失败,并且没有任何消息提供 Visual Studios 2010 中失败的原因

    我最近在本地计算机上安装了 VS 2010 但似乎无法让 Resharper 5 1 和单元测试正常工作 每当我尝试运行单元测试时 我都会收到 构建失败 测试图标保持灰色 但输出窗口中没有信息 也没有明显的原因 在进行 nant 构建时 单
  • 在向量>上使用push_back [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有点尴尬
  • 如何在 mySQL Server 数据库架构中找到所有填充 100% 空值的列?

    有没有一种 SQL 方法可以找出我的架构中的哪些列完全充满空值 我知道几个表中的某些字段不会被应用程序使用 并且将被删除 但我想看看是否有一种自动化的方法 脚本可以在整个数据库中找到这些字段 以找到代码审查的候选者 可能的删除 如果有必要的
  • Gson 反序列化 Realm 基元列表

    我正在将领域与 gson 一起使用 我有一个模态 其中有一个 int 类型字段列表 Realm 目前不支持基元列表 为了解决这个问题 有一个解决方案 我创建了 RealmInt 类 import io realm RealmObject p
  • 如何防止子元素继承CSS样式

    我有一个 div 元素与一个 p 里面的元素 p div style font size 10pt color red This is my Parent Div p This is my Child Paragraph p My pare
  • 重写和url解码

    似乎有一个网站以错误的方式链接到我的网站 从谷歌网站管理员工具我看到一些 404 错误 domain com file php id 1 404 Not found Date 这个 url 工作正常 但由于浏览器页面解码 真实的 404 u
  • AngularJS:具有路由的多个视图而不丢失范围

    我正在尝试实现一个经典的列表 详细信息用户界面 单击列表中的某个项目时 我想显示该项目的编辑表单同时仍然显示列表 我正在尝试解决 Angular 的每页 1 个视图的限制 并决定通过将所有 URL 路由到同一控制器 视图来实现此目的 也许这
  • 共享内存和文件的关系

    忽略一些细节 Linux 中有两个可用的低级 SHM API 我们有older e g System V IPC 与 POSIX IPC https stackoverflow com questions 4582968 system v
  • 绑定无法在“双模式”下工作(webHttpBinding 和 basicHttpBinding)

    我有一个 WCF 服务 使用我的网络项目中的 webHttpBinding 效果很好 我还希望 WinForms 客户端可以使用此服务 因此添加了 basicHttpBinding 绑定 我的服务器配置文件当前是
  • 未处理的 IIS 异常 - 如何追踪它

    我在事件日志中看到以下错误 它来自我们的 ASP Net 应用程序 我无法追踪导致错误的原因 任何建议表示赞赏 OS Windows Server 2000 网络服务器 IIS 6 应用 ASP Net v3 5 错误日志 MachineN
  • 存储过程中 exec 内的临时表的作用域规则是什么?

    比较以下存储过程 CREATE PROCEDURE testProc1 AS SELECT INTO temp FROM information schema tables SELECT FROM temp GO CREATE PROCED