这个是Excel的,比如是test.xls
欠费年份 欠费开始月份 欠费结束月份 应缴金额(月租)
    2001        9      12             94.4
    2008        5      12             88.8
    2010        8      12             90.4
___________________________________________
这个是表:比如是a表
a(pk,int,not null)                        //主键,自动增长
b(varchar(19),null)                       //费款所属期
c(decimal(10,2),null)                     //应缴金额
___________________________________________
现在我要将test.xls中的数据导入到a表,从开始月份到结束月份要做循环导入,比如第一条2001年的从9月到12月要录入4条数据到a表,导入后的格式如:select * from aa     b c
1 2001-09        94.4
2 2001-10        94.4
3 2001-11        94.4
4 2001-12        94.4数据库是MS Sql server 2008小弟我研究了好久,每走一步都很艰难,特别是要做循环导入的时候,字符串拼接,日期格式转换,这些都把我弄得晕晕的,忘各位大虾能够帮助小弟,有点急,在线等

解决方案 »

  1.   

    DECLARE @n INT
    SET @n = 100 ;
    WITH    numcte
              AS ( SELECT   1 AS n
                   UNION ALL
                   SELECT   n + 1
                   FROM     numcte
                   WHERE    n < @n
                 )
        SELECT  *
        INTO    Nums
        FROM    numcte;--创建一个临时数字辅助表Nums
    CREATE TABLE tba
        (
          a INT IDENTITY(1, 1) ,
          b VARCHAR(19) ,
          c DECIMAL(10, 2)
        );
    INSERT  dbo.tba
            ( b ,
              c 
            )
            SELECT  CONVERT(CHAR(7), CONVERT(DATETIME, CONVERT(CHAR(4), a.欠费年份)
                    + '-' + CONVERT(VARCHAR(2), a.欠费开始月份 + n - 1) + '-01'), 120) ,
                    a.[应缴金额(月租)]
            FROM    ( SELECT    *
                      FROM      OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
                                               'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[sheet1$]
                    ) a
                    JOIN dbo.Nums ON n <= a.欠费结束月份 - a.欠费开始月份 + 1
    SELECT  *
    FROM    dbo.tbaDROP TABLE dbo.tba,dbo.Nums
    /*
    (17 行受影响)
    a           b                   c
    ----------- ------------------- ---------------------------------------
    1           2001-09             94.40
    2           2001-10             94.40
    3           2001-11             94.40
    4           2001-12             94.40
    5           2008-05             88.80
    6           2008-06             88.80
    7           2008-07             88.80
    8           2008-08             88.80
    9           2008-09             88.80
    10          2008-10             88.80
    11          2008-11             88.80
    12          2008-12             88.80
    13          2010-08             90.40
    14          2010-09             90.40
    15          2010-10             90.40
    16          2010-11             90.40
    17          2010-12             90.40(17 行受影响)
    */
      

  2.   

    文件放在c盘目录下,xls如下
      

  3.   

    真的灰常感谢    qgqch2008   ,谢谢了,此刻我已经不知道用什么言语来表达我的谢意了