【问题标题】:How to SELECT * INTO [tmp table] without declare table?如何在不声明表的情况下选择 * INTO [临时表]?
【发布时间】:2011-10-02 08:41:16
【问题描述】:

我想在表上使用 select 语句并将结果插入到临时表变量中,但我没有声明带有列的临时表,我想像这样使用:

Declare #tmp table;

SELECT * INTO #tmp FROM myTable

这需要为#tmp 声明列和数据类型

请帮帮我

【问题讨论】:

  • 请注意,select into 不是表格的真实副本。例如,如果您有一个标识列,则保留此属性,但不会复制其他表属性和对象(索引、约束、触发器等)。

标签: sql-server-2005 sql-server-2008


【解决方案1】:

您可以在没有 DECLARE 命令的情况下简单地执行此操作 - 无论如何,这对 #temp 表无效,仅对 @table 变量有效。您是否尝试过以下操作而未尝试先定义 #tmp:

SELECT * INTO #tmp FROM myTable;

【讨论】:

  • 那么您的问题是如何创建#temp 表而不在 tempdb.sys.tables 中创建条目?你为什么在乎?无论如何,如果不在 tempdb.sys.tables 中生成一行,您将无法创建 #temp 表(或 @table 变量),抱歉。
  • 哦,是的。谢谢亚伦。我决定手动删除临时表
  • 不要忘记删除临时表 -> 在最后删除表#temp
  • @user1412699 你为什么要做这两件事? (Please read this post on temp object caching.)
【解决方案2】:

有数据:

select *
into #tmp
from myTable

没有数据:

select *
into #tmp
from myTable
where 0=1

顺便说一句,您可以对表变量执行此操作。

select *
into @tmp
from myTable

表变量需要与列一起声明。

【讨论】:

  • @Aaron - 你从我这里得到了一个,因为你是第一个给出正确答案的:)
  • 虽然我只比你快3秒? :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2019-09-11
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多