【问题标题】:Table data insert from another table with an order sql表数据从另一个表插入一个订单 sql
【发布时间】:2015-11-10 03:05:07
【问题描述】:

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

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

【问题讨论】:

  • 您的代码非常好。请澄清你的问题是什么。您的短语“但不是订单格式”根本不清楚。
  • 实际上我的数据被插入到 StudentInfo_MeritPosition 表中。但我需要按优点顺序排列的数据。但它插入的是 StudentInfo 表的内容。
  • “订单格式”表示像某些学生职位 3,2,5,9,6 这种格式。但是当新数据保存在数据库中时,它会保存在像2,3,5,6,9这样的优点位置列中。

标签: c# sql sql-server


【解决方案1】:

SQL 表代表无序 集合。当您从表中检索数据时,数据没有特定的顺序,除非您指定order by。因此,您可以将数据检索为:

select mp.*
from StudentInfo_MeritPosition mp
order by mp.MeritPosition;

您可以通过在StudentInfo_MeritPosition(MeritPosition) 上添加索引来提高此查询的效率。

【讨论】:

  • 我实际上无法得到正确的输出。请帮我写完整的命令。
  • @asmmorshed 。 . .这是按顺序检索结果的整个 SQL 查询。与insert无关。
【解决方案2】:

您可以使用临时表以任何您想要的方式订购。在我看来,首先组装一个临时表更容易,然后对这些结果进行排序并将它们选择到您尝试按给定顺序填充的表中。通过这种方式,您可以将其转换为存储过程,并将“列名”和“ASC 或 DESC”参数提供给它。由于您正在选择、排序、重新选择和插入,临时表将需要更长的时间来处理。但是,最终结果比允许您使用任何列名和 ASC 或 DESC 的 1 次查询更加健壮。请记住,当您将结果选择到永久表中时,您会在 select into 语句中省略主键(通常是 [P_ID])列。

【讨论】:

    【解决方案3】:

    因此,为了改进 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),绕过我之前提到的临时表创建过程。

    【讨论】:

      【解决方案4】:

      试试这个。

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

      【讨论】:

      • 它不工作。它显示 ORDER BY 子句在视图中无效此错误
      猜你喜欢
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2022-08-12
      • 2018-07-25
      • 2013-04-25
      • 1970-01-01
      相关资源
      最近更新 更多