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

Mik*_*ike 4 sql t-sql sql-server

我的天啊!我究竟做错了什么?

declare @WTF TABLE (
 OrderItemId int
)

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

SELECT * FROM [@WTF]
Run Code Online (Sandbox Code Playgroud)

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

问题B:最后一行代码,如果我从@WTF中选择*...没有[],则返回NOTHING.[]的意义是什么?

我需要认真的帮助.我失去了我的心灵!

提前致谢.

OMG*_*ies 6

您的设计体验是:

SELECT ... INTO在默认文件组中创建一个新表,并将查询中的结果行插入其中.

替代方案是:

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

    INSERT INTO @WTF
      (orderitemid)
    SELECT TOP 20 
           oi.orderitemid
      FROM ac_ORDERITEMS oi
    
    Run Code Online (Sandbox Code Playgroud)

请注意,在使用时TOP,您应该定义一个ORDER BY子句以确保一致地返回数据.