使用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

上面的代码将数据插入数据库。但不是按订单格式。我想知道是否有办法解决这个问题。非常感谢。

使用order sql从另一个表插入表数据

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 );