通过使用union select将值插入临时表,如何按照我指定的顺序插入值?

时间:2014-11-18 23:12:58

标签: sql sql-server

我创建了一个临时表,并使用union select。

将一些值插入其中
CREATE TABLE tempdb..#tempName (ID int IDENTITY (1, 1) NOT NULL, Name varchar(20) NULL)

INSERT INTO #tempName(Name)
SELECT 'tommy'
UNION SELECT 'jimmy'
UNION SELECT 'adam'
UNION SELECT 'lucy'

问题:我想知道如何按我写的顺序插入值。目前它以升序顺序插入。

我希望如何插入值:

-- ID -- Name
-- 1  -- tommy
-- 2  -- jimmy
-- 3  -- adam
-- 4  -- lucy   

它插入临时表的订单:

-- ID -- Name
-- 1  -- adam
-- 2  -- jimmy
-- 3  -- lucy
-- 4  -- tommy  

1 个答案:

答案 0 :(得分:1)

您按字母顺序获取内容的原因是union。它执行额外的处理以删除重复项。这就是为什么union all通常被推荐的原因。

使用union all可能几乎总能做到你想做的事情:

INSERT INTO #tempName(Name)
    SELECT 'tommy'
    UNION ALL SELECT 'jimmy'
    UNION ALL SELECT 'adam'
    UNION ALL SELECT 'lucy';

这种方法在实践中有效,并且似乎产生了一致的执行计划,该计划将按顺序生成记录。但是,这种行为无法保证。

多个INSERT肯定会有用。

INSERT INTO #tempName(Name) SELECT 'tommy';
INSERT INTO #tempName(Name) SELECT 'jimmy'
INSERT INTO #tempName(Name) SELECT 'adam'
INSERT INTO #tempName(Name) SELECT 'lucy';

VALUES语句将起作用:

INSERT INTO #tempName(Name)
    VALUES (('tommy'), ('jimmy'), ('adam'), ('lucy'));