使用order sql从另一个表插入表数据
本文关键字:插入 数据 另一个 order sql 使用 | 更新日期: 2023-09-27 18:21:14
在我的项目中,我需要插入另一个表中的表数据。我试着写这个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)
上添加索引,可以提高此查询的效率。
您可以使用临时表以任何方式进行订购。在我看来,先组装一个临时表,然后对这些结果进行排序,并将它们选择到您试图按给定顺序填充的表中,会更容易。通过这种方式,您可以将其转换为存储过程,并为其提供"列名"answers"ASC或DESC"参数。由于要进行选择、排序、重新选择和插入,临时表将需要更长的时间才能使用。然而,最终结果比允许您使用任何列名、ASC或DESC的一次查询要健壮得多。请记住,当您将结果选择到永久表中时,您会在select into语句中省略主键(通常为[P_ID])列。
因此,为了改进Gordon的答案,您可以编写如下内容:
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 );