[英]Table data insert from another table with an order sql
在我的項目中,我需要從另一個表插入一個表數據。 我試圖編寫此sql代碼。 但是,在插入數據時,此按選項排序不起作用。 這是我的代碼:
INSERT INTO StudentInfo_MeritPosition
( ID,
Name,
MeritPosition,
SSC,
HSC,
First,
Second,
Third,
Fourth,
Fifth
)
SELECT ID,
Name,
MeritPosition,
SSC,
HSC,
First,
Second,
Third,
Fourth,
Fifth
FROM StudentInfo
ORDER BY MeritPosition
上面的代碼將數據插入數據庫。 但不是訂單格式。 我需要知道我們是否可以解決此問題。 謝謝。
SQL表表示無序集。 從表中檢索數據時,數據沒有特定的順序,除非您通過指定order by
。 因此,您可以按以下方式檢索數據:
select mp.*
from StudentInfo_MeritPosition mp
order by mp.MeritPosition;
您可以通過在StudentInfo_MeritPosition(MeritPosition)
上添加索引來提高此查詢的效率。
您可以使用臨時表以所需的任何方式進行排序。 在我看來,先組裝一個臨時表,然后對這些結果進行排序,然后將它們選擇到要按給定順序填充的表中,會更容易。 這樣,您可以將其轉換為存儲過程,並向其提供“列名”和“ ASC或DESC”的參數。 由於您正在選擇,排序,重新選擇和插入,因此臨時表的處理時間會更長一些。 但是,最終結果比1次查詢更健壯,它允許您使用任何列名以及ASC或DESC。 只需記住,當您確實將結果選擇到永久表中時,就沒有了select into語句中的主鍵(通常為[P_ID])列。
因此,為了改善戈登的答案,您可以編寫如下內容:
DECLARE @fromTbl, @sortCol, @orderByCol VARCHAR(50)
EXEC('
select mp.*
from /* StudentInfo_MeritPosition* / ' + @fromTbl + 'mp
order by /* mp.MeritPosition */ mp.' + @orderByCol + ' ' + @sortOrder;'
/* If you wanted to debug it and make sure your parameters are being
generated correctly, you can use the PRINT function instead of
Exec('Your statement above') */
然后,如果將其轉換為SP,則可以傳入三個參數表,按列順序和排序順序(ASC | DESC),並繞開我前面提到的臨時表創建過程。
嘗試這個。
INSERT
/*+append*/
INTO StudentInfo_MeritPosition
( ID,
Name,
MeritPosition,
SSC,
HSC,
First,
Second,
Third,
Fourth,
Fifth
)
SELECT *
FROM (
SELECT ID,
Name,
MeritPosition,
SSC,
HSC,
First,
Second,
Third,
Fourth,
Fifth
FROM StudentInfo
ORDER BY MeritPosition );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.