Sql 将行中不同字段的值按一定顺序插入到另一个表的一列中

Sql 将行中不同字段的值按一定顺序插入到另一个表的一列中,sql,tsql,Sql,Tsql,当我将表T_EMP_MASTER中的字段插入临时表时,它会按照EMP_id、EMP_id2、EMP_id3的值顺序出现在temp_empdet中。 我希望emp_id、emp_id2、emp_id3字段按照插入顺序插入,如 1. emp_id 2. emp_id2 3. emp_id3 我如何在这里做同样的事情,使用union的相同插入或使用其他任何东西 CREATE TABLE #TEMP_EMPDET (SN INT,EMP_ID INT) INSERT INT

当我将表T_EMP_MASTER中的字段插入临时表时,它会按照EMP_id、EMP_id2、EMP_id3的值顺序出现在temp_empdet中。 我希望emp_id、emp_id2、emp_id3字段按照插入顺序插入,如

1. emp_id   
2. emp_id2   
3. emp_id3    
我如何在这里做同样的事情,使用union的相同插入或使用其他任何东西

 CREATE TABLE #TEMP_EMPDET
 (SN INT,EMP_ID INT)

 INSERT INTO #TEMP_EMPDET
 SELECT EMP_ID FROM T_EMP_MASTER WHERE CODE = @CODE
 UNION
 SELECT  EMP_ID2 FROM T_EMP_MASTER WHERE CODE = @CODE
 UNION
 SELECT  EMP_ID3 FROM T_EMP_MASTER WHERE CODE = @CODE

如果要保证插入顺序,请使用三个单独的语句:

INSERT INTO #TEMP_EMPDET (EMP_ID)
    SELECT EMP_ID FROM T_EMP_MASTER WHERE CODE = @CODE;

INSERT INTO #TEMP_EMPDET (EMP_ID)
    SELECT  EMP_ID2 FROM T_EMP_MASTER WHERE CODE = @CODE;

INSERT INTO #TEMP_EMPDET (EMP_ID)
    SELECT  EMP_ID3 FROM T_EMP_MASTER WHERE CODE = @CODE;
因为SQL表表示无序集,所以您只能在标识列中看到排序,或者如果EMP_ID是集群键,则只能看到排序

CREATE TABLE #TEMP_EMPDET (
    EMPDET_ID INT IDENTITY PRIMARY KEY,
    SN INT,
    EMP_ID INT
);
您的代码没有按顺序插入值,特别是因为联合。这样可以消除重复并重新排列数据。如果你想要这个功能,事情会变得更复杂。我想我建议:

INSERT INTO #TEMP_EMPDET
    SELECT v.EMP_ID
    FROM T_EMP_MASTER EM CROSS APPLY
         (VALUES (1, EMP_ID), (2, EMP_ID2), (3, EMP_ID3)
         ) V(WHICH, EMP_ID)
    WHERE CODE = @CODE
    GROUP BY v.EMP_ID
    ORDER BY MIN(WHICH);
表行表示未重新编写的数据集。由查询(如select*from empdet)返回的记录中没有固有的顺序,除非您指定并按子句排序。