本帖最后由 kinthtime 于 2011-04-26 23:41:04 编辑

解决方案 »

  1.   

    如果格式可以这样换就不用发帖请教了
    excel文档很多,而且每天更新 换格式不现实
      

  2.   

    类似问题在C#里面我是先找到文件夹,然后表名加上[]即可,
    直接在存储过程中,我没有处理过你可以试一下
    'F:\excel\ID200001_大豆_2011-04-20.xls'
    得到后
    找到最后一个.和最后一个\中间的内容加上[] 试一试。
      

  3.   

    搞定:
    ALTER PROCEDURE spExcelOutIn
    @strOptions varchar(200) = NULL,
    @strWhere nvarchar(4000) = NULL,--导入/导出查询条件(包括Where 关键字)
    @strExcelPath nvarchar(1000) = NULL,--Excel的绝对路径
    @strExcelSheetName nvarchar(50) = NULL,--Excel里要导入的工作表名称 如Sheet2,注意,后面不要加上$
    @strExcelFiled nvarchar(1000) = NULL,--Excel工作表的字段
    @strSqlTableName nvarchar(100) = NULL,--Sql数据库导入/导出表名
    @strSqlFiled nvarchar(1000) = NULL--Sql表的字段
    AS
    DECLARE @strSql nvarchar(4000)
    IF OBJECT_ID('tempdb..##Temp') IS NOT NULL 
    DROP TABLE ##TempIF @strOptions='In' AND NOT @strExcelPath IS NULL 
    BEGIN
    SET @strExcelPath = '''Microsoft.Jet.OLEDB.4.0'',''Data Source="' + @strExcelPath + '";User ID=Admin;Password=;Extended properties=Excel 5.0''' SET @strSql =
    N'SELECT ' + @strExcelFiled +
    N' INTO ##Temp
    FROM  
    OpenDataSource('+ @strExcelPath +N')...'+ QUOTENAME('''' + @strExcelSheetName +N'$''') --加单引号
    +@strWhere --PRINT(@strSql)
    EXEC(@strSql)   SET @strSql = 'INSERT INTO ' + @strSqlTableName + ' ('+ @strSqlFiled +') SELECT * FROM ##Temp'
    --PRINT(@strSql)
    EXEC(@strSql)  

    IF OBJECT_ID('tempdb..##Temp') IS NOT NULL 
    DROP TABLE ##Temp
    END
    GO