【问题标题】:SELECT INTO variable named temp table, reference it, And DROP it选择名为临时表的变量,引用它,然后删除它
【发布时间】:2017-12-18 12:44:50
【问题描述】:

如何使用 SELECT INTO 创建一个名为 temp table 的变量(例如,#TempTable2017_12_18_14_32_423 其中#TempTable 是一个字符串,2017_12_18_14_32_423 是一个GETDATE() 格式化变量),然后在它被引用之后引用相同的名称创建?然后我需要在程序完成后再次放下它。

我知道动态 SQL 是可能的,但由于整个过程的复杂性,我试图避免它,并且需要限制在将其转换为动态 SQL 的项目上花费的时间

【问题讨论】:

  • 为什么您认为临时表名称需要如此复杂?临时表仅对您自己的会话是本地的,如果在存储过程完成执行时在存储过程中创建它们,它们将被自动删除。
  • 我非常不喜欢像“为什么...”这样的 cmets,但我无法抗拒 - 为什么需要这样命名的临时表? /对不起,达米安要快得多/
  • sp每分钟运行几百次,需要避免过早掉表
  • 每个运行的 SP 实例都将获得自己的临时表,即使它们都使用完全相同的名称
  • 在触发器的情况下呢?我知道我问过 sp,但那里也有类似的问题。

标签: sql-server stored-procedures


【解决方案1】:

我不知道你为什么会想到这么复杂的想法。通过以日期和时间命名的表,您正在寻找的是根据该日期和时间过滤记录,然后最好的方法是在表上有一个 datetime 列,然后根据该列过滤记录。

通常,当您创建临时表时,该表实际上是在服务器的 temdb 中创建的。即使您只是将表名指定为#temp,在 tempdb 上创建的表也会包含一些带有表名的附加信息,例如会话 ID,这就是为什么您可以在同一数据库上拥有多个具有相同名称的临时表具有不同结构的多个查询窗口(会话)。

(这个概念太宽泛了,这里就不解释了,所以我只是给出一个基本的想法)

【讨论】:

  • 我理解您的观点并且已经知道这一点,但是正在运行的过程需要复杂性,因为它使用 AI 来确定要执行的大约 50 个任务之一。
猜你喜欢
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2011-02-05
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多