hi all!
我需要一个存储过程,功能是 根据传入的一个参数:@dir=存放excel的路径  然后
1 建一个临时表#temp 把excel导入的数据都导入 
2 把临时表的记录全部返回query1  再把这已导入excel数据的临时表的记录与数据库已存在的表的记录相比较 如果记录内容完全相同就把这些记录返回给query2 ,如果不同就返回给 query3嗯 关键是第二步 大家能提供一些解决方法或者code吗?
谢谢!

解决方案 »

  1.   

    Create PROCEDURE sp_GetQuery2 @dir VARCHAR(50)   --取相同记录
    as
        Create Table #t(id int,f1 varchar(50),f2.......)
        Exec('insert into #t
              SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',
              ''Excel 5.0;HDR=YES;DATABASE='+@Dir+''',sheet1$)')    
        Select * from #t a Where 
             Exists (Select * from 数据库某表 b   
                         where a.字段1=b.字段1
                             and a.字段2=b.字段2
                              and ......)
        Drop Table #t
    go
    Create PROCEDURE sp_GetQuery3 @dir VARCHAR(50)   --取不相同记录
    as
        Create Table #t(id int,f1 varchar(50),f2.......)
        Exec('insert into #t
              SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',
              ''Excel 5.0;HDR=YES;DATABASE='+@Dir+''',sheet1$)')    
        Select * from #t a Where 
             Not Exists (Select * from 数据库某表 b   
                         where a.字段1=b.字段1
                             and a.字段2=b.字段2
                              and ......)
        Drop Table #t
    go--未测试,根据实际修改
      

  2.   

    谢谢 DebugXP() 我想差不多了 想问一下存储过程不能返回多个记录集吗? 就是把这两个存储过程合起来 ?
      

  3.   

    而且我执行存储过程时老出错 出错信息为:“服务器: 消息 7405,级别 16,状态 1,行 1
    异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。”
    我用的是ms slq2000 个人版 有影响吗?
      

  4.   

    1.可以返回多个几个记录集  用NextRecordset函数2.把存储过程删掉,重建即可.
      

  5.   

    1正在测试2.把存储过程删掉,重建即可. 这方法不灵再次感谢 DebugXP()
      

  6.   

    ANSI_NULLS 和 ANSI_WARNINGS 的问题,用下面的SQL在分析器里建存储过程————————————————————————————
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_Excel]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[sp_Excel]
    GOSET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GOCREATE PROCEDURE [dbo].[sp_Excel] @dir varchar(40) AS    Create Table #t(f0 VARCHAR(100),f1 varchar(100),f2 Varchar(100),f3 VARCHAR(100),f4 VARCHAR(100))
        Exec('insert into #t
              SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',
              ''Excel 5.0;HDR=YES;DATABASE='+@dir+''',aaa$)') 
    select * from #t
    Drop table #t
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
    ————————————————————————————