我创建了一个临时表,并使用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
答案 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'));