sql - T-SQL 表变量创建物理表!

标签 sql sql-server tsql

天哪!我做错了什么?

declare @WTF TABLE (
 OrderItemId int
)

SELECT TOP 20 OrderItemId as OrderItemId INTO [@WTF] FROM ac_OrderItems

SELECT * FROM [@WTF]

问题 A:这会创建一个名为 @WTF 的 PHYSICAL 表。为什么??我以为这只是在内存中?!

问题 B:最后一行代码,如果我确实从 @WTF... 中选择 * 而没有 [ ],则不会返回任何内容。 []有什么意义?

我需要认真的帮助。我快疯了!

提前致谢。

最佳答案

What you experience is by design :

SELECT…INTO creates a new table in the default filegroup and inserts the resulting rows from the query into it.

替代方案是:

  1. 不定义WTF表,并依赖行为自动创建它
  2. 使用现有代码,但将 SELECT INTO 更改为 INSERT:

    INSERT INTO @WTF
      (orderitemid)
    SELECT TOP 20 
           oi.orderitemid
      FROM ac_ORDERITEMS oi
    

请注意,使用 TOP 时,您应该定义 ORDER BY 子句以确保返回数据的一致性。

关于sql - T-SQL 表变量创建物理表!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2420396/

相关文章:

SQL 查询将列值显示为表中的列名

php - 设置 While 循环的限制并按日期排序

php - 无法将变量 'sql_mode' 设置为“REPLACE”的值

java - Hibernate:在 SQL Server 2008 上,列已从 datetime 更改为 datetime2。我如何更新 hibernate 配置以反射(reflect)这一点?

asp.net - 开发与生产 : Connection Strings

sql - 连接 T-SQL 中的顶级记录

sql - 哪个查询似乎有效?

python - Django 模型 .get 失败,但 .filter 和 .all 有效 - 对象存在于数据库中

mysql - 如果最小值的状态等于特定值,如何选择最小值?

java - 找不到驱动程序