当我将表T_EMP_MASTER中的字段插入temp表时,它按照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
答案 0 :(得分:0)
如果要保证插入顺序,请使用三个单独的语句:
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
);
由于UNION
,您的代码未按顺序插入值。这样就消除了重复,并重新排列了数据。如果您需要该功能,事情会变得更加复杂。我想我会推荐:
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);