日期:2014-05-19  浏览次数:20543 次

有个问题已好几天了还没解决就是excel的导入问题
CREATE   PROCEDURE   [dbo].[bbjdr]  

@filename   varchar(200),               --Excel文件名
@exceltablename     varchar(20),   --EXcel内表名
@tablename   varchar(200)               --将要存在数据库里的表名
    AS
      declare   @sql   varchar(1000)
set   ANSI_NULLS   on  
set   ANSI_WARNINGS   on  
      set   @sql= '   insert   into   '+@tablename+
                        '   SELECT   *   '+
                        '   FROM   OpenDataSource( ' 'Microsoft.Jet.OLEDB.4.0 ' ', ' 'Data   Source= '+@filename+
                        ';User   ID=Admin;Password=;Extended   properties=Excel   8.0;HDR=yes;imex=1 ' ')...[ '+@exceltablename+ '] '
      exec(@sql)
GO
我用这个存储过程   将excel文件导入到数据库中时   总是报服务器:   消息   7405,级别   16,状态   1,行   1
异类查询要求为连接设置   ANSI_NULLS   和   ANSI_WARNINGS   选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。我在存储过程当中设置了,同时也在sql   server   数据库中也把
ANSI_NULLS   和   ANSI_WARNINGS   设置成默认值。还是不行

------解决方案--------------------
删除存储过程(如果已经创建好的话),然后在查询分析器中直接执行创建存储过程的代码来创建存储过程就行了.

只有一招:
在查询分析器中重新创建该SP

Drop proc spname
Create proc spname......创建存储过程就行了.

Why?
ANSI_NULLS 和 ANSI_WARNINGS

设置的保留问题,存储过程创建后,创建时的ANSI_NULLS 和 ANSI_WARNINGS 选项就会一直保留.

所以删除存储过程重就行了(在查询分析器中建,是因为查询分析器的默认ANSI_NULLS 和 ANSI_WARNINGS 设置是on



------解决方案--------------------
你这样无法知道错误所在,先执行倒表的sql 看看能否成功.
然后在依次将变量放在sql执行
------解决方案--------------------
set ANSI_NULLS on
set ANSI_WARNINGS on

这两个选项应该放在创建存储过程之前,保证整个存储过程执行中都是打开的