在我的项目中,我需要从另一个表中插入表数据。我试着写这个sql代码。但是这个order by选项在插入数据时不起作用。这是我的代码:
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
以上代码将数据插入数据库。但不是订单格式。 我需要知道我们是否有任何办法解决这个问题。谢谢。
答案 0 :(得分:3)
SQL表代表无序集。当您从表中检索数据时,除非您指定order by
,否则数据没有特定的顺序。因此,您可以将数据检索为:
select mp.*
from StudentInfo_MeritPosition mp
order by mp.MeritPosition;
您可以通过在StudentInfo_MeritPosition(MeritPosition)
上添加索引来提高此查询的效率。
答案 1 :(得分:0)
您可以使用临时表以您想要的任何方式进行排序。在我看来,首先组装临时表更容易,然后对这些结果进行排序,并将它们选择到您尝试按给定顺序填充的表中。通过这种方式,您可以将其转换为存储过程,并为其提供"列名称"的参数。和#34; ASC或DESC。"由于您正在选择,排序,重新选择和插入,因此临时表需要更长的时间才能使用。但是,最终结果比一次查询更加健壮,允许您使用任何列名称和ASC或DESC。请记住,当您将结果选择到永久表中时,您将从select into语句中省略主键(通常是[P_ID])列。
答案 2 :(得分:0)
所以,为了改进戈登的答案,你可以写下以下内容:
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)并绕过我之前提到的临时表创建过程。
答案 3 :(得分:-1)
试试这个。
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 );