用什么方法导入EXCEL报表文件呢?exe master..xp_cmdshell 'bcp "select * from database.dbo.tableName" queryout c:\test.xls -c -q -SserverName -Usa -Ppwd'or exe master..xp_cmdshell 'bcp databaseName.dbo.tableName out c:\test.xls -c -q -SserverName -Usa -Ppwd'其中tableName是你用存储过程动态生成的存放报表数据的表

解决方案 »

  1.   

    意思是把报表数据生成一个Excel文件,存放在C盘下的test.xls文件里
      

  2.   

    谢谢 nboys() ,这么晚了还回答问题。有点我没有说清楚,由于生成的结果是动态列,因此没有办法事先建立表,哪怕SELECT INTO 也不行,当然也用不了表型函数;而INSERT INTO  EXEC 需要首先创建表,SO,没办法将结果输入表,只能返回客户端。
    用BCP 能使用复杂查询么?能使用存储过程么?我没做过,请指教
      

  3.   

    you should be able to create tables in excel dynamically, seehttp://support.microsoft.com/default.aspx?scid=kb;en-us;Q316934you could do something likeSELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]orINSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"since you are using a stored procedure, you have to doselect * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1]  from openrowset ( 'SQLOLEDB' , 'DRIVER={SQL Server};SERVER=(local);Trusted_Connection=yes'
    , 'set fmtonly off exec sp_who2' )orINSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;'  select * from openrowset ( 'SQLOLEDB' , 'DRIVER={SQL Server};SERVER=(local);Trusted_Connection=yes'
    , 'set fmtonly off exec sp_who2' )
    but bcp is probably a better way, or you can invoke osql command in your codeosql /U sa /P password /d pubs /S Server9 /Q "sp_help" -o ofile.txtsee
    http://www.sqlteam.com/item.asp?ItemID=744
    http://www.sqlteam.com/item.asp?ItemID=4722
      

  4.   

    應該是
    exec master..xp_cmdshell 'bcp "select * from database.dbo.tableName" queryout c:\test.xls -c -q -SserverName -Usa -Ppwd'or exec master..xp_cmdshell 'bcp databaseName.dbo.tableName out c:\test.xls -c -q -SserverName -Usa -Ppwd'
      

  5.   

    BCPbcp 实用工具
    bcp 实用工具在 Microsoft® SQL Server™ 2000 实例和数据文件之间以用户指定的格式复制数据。语法
    bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
        {in | out | queryout | format} data_file
        [-m max_errors] [-f format_file] [-e err_file]
        [-F first_row] [-L last_row] [-b batch_size]
        [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
        [-q] [-C code_page] [-t field_term] [-r row_term]
        [-i input_file] [-o output_file] [-a packet_size]
        [-S server_name[\instance_name]] [-U login_id] [-P password]
        [-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]
      

  6.   

    excel自己有一个 copyfromrecordset函数。学学。
      

  7.   

    这些都不好,你应该用vb实现而不是sqlserver,如果你的程序和数据库不是一个机器上,问题就很突出了。上面写的所有方法生成的xls都是在数据库所在的服务器上,而不是客户端。
      

  8.   

    用vb实现也很简单只要写个程序生成一个txt文本文件,用“制表符” 或“,”分割,并把扩展名改为xls就可以了
      

  9.   

    大力,你说的方法我知道,不过,这个方法和用RANGE和数组的方法比,哪个比较好呢?还有,如果数据量大,有没有内存方面的问题,EXCEL文件有没有大小限制?请教!
      

  10.   

    今天我同事说用RANGE有时会失败,我没有经历过,不能确定,所以想问问到底有没有这个问题,哪种方法可以最优?
      

  11.   

    内存?主要瓶径在网络传输,你可以直接读结果集写文件不用数组,用了数组那不是要到内存中拷贝一次?excel每页好象有限制。
      

  12.   

    恩,我想数组的方法的缺点就在对内存消耗比较大,不过,不用写文件,速度比较快,如果内存够用,是否比文本方式好呢?还有,用文本转存,每次只能生成一个文件,用EXCEL打开也只能打开一个WORKBOOK,如果我需要存为多个SHEET,就要同时用EXCEL打开相应文本,读取数据,转存为一个SHEET,然后打开最终的目标EXCEL文件,将这个SHEET拷贝到目标文件里。我感觉这样操作很不爽,大力,你的看法呢?