从具有sql

时间:2015-11-10 03:05:08

标签: c# sql sql-server

在我的项目中,我需要从另一个表中插入表数据。我试着写这个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

以上代码将数据插入数据库。但不是订单格式。 我需要知道我们是否有任何办法解决这个问题。谢谢。

4 个答案:

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