###请进来帮我看看这个问题,是什么原因造成的,关于数据导入的!

skyboy0720 2006-04-11 09:08:11
我的需求是2批DBF导入SQL SERVER,我的导入方法是
EXEC('insert into '+@DB_NAME+@TEMP_SQL_NAME+' select * from openrowset
(''MSDASQL'',''Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;
SourceDB='+@FILE_P_PATH+''',
''select * from '+@TEMP_DBF_NAME+''')')
做过的人一看知道什么意思!

第1批有3个DBF文件,执行以后完全OK,然后第2批有10多个DBF文件,结果同样的程序运行以后
我用JDBC捕获了异常为:error:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]异类查询要求为连接设
置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然
后重新发出查询。

我不知道,这个错误是什么原因造成的,请教做过的朋友

什么样的情况会发生这个!,谢谢
...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyboy0720 2006-04-11
  • 打赏
  • 举报
回复
谢谢各位,我解决了?!
用查询分析器的方式开发存储过程修改,系统会加上默认的一些设置在顶部,平时都没注意看
倒啊,惭愧!
十豆三 2006-04-11
  • 打赏
  • 举报
回复
参考SQL帮助中的

SET ANSI_NULLS

SET ANSI_WARNINGS

看看设置成ON还是OFF,才能对上的规则
TERRYYRRET 2006-04-11
  • 打赏
  • 举报
回复
估计你的.dbf本身设置了规则,你可以先去掉试一下
skyboy0720 2006-04-11
  • 打赏
  • 举报
回复
我发现个奇怪的问题,我在查询分析器里修改存储过程,我把动态的导入,改成直接导入
INSERT into gg_cpinfo SELECT * from openrowset
('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;
SourceDB=E:\TEST\','select * from cpinfo.DBF')
,然后执行,结果,在查询分析器里就抱这个错了:
服务器: 消息 7405,级别 16,状态 1,过程 P_DBF_TO_SQL_1,行 72
异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。

是不是数据库哪里设置的问题????可是,为什么我第1批导入成功了?
十豆三 2006-04-11
  • 打赏
  • 举报
回复
表名有没有带空格的。

另外,看看引号是否对。


看看这个对你有没有帮助:
以下均以SQL2000、VFP6及以上的表为例


方法一:查询分析器中执行如下语句(先选择对应的数据库)

--如果接受导入数据的SQL表已经存在
insert into 已经存在的SQL表名 select * from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select * from aa.DBF')

--也可以对应列名进行导入,如:
insert into 已经存在的SQL表名 (列名1,列名2...) select (对应列名1,对应列名2...) from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select * from aa.DBF')



--如果接受导入数据的SQL表不存在,导入时创建

--方法一:
select * into 要生成的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select * from dbf表名.DBF')

--方法二:
select * INTO TEMP1 from openrowset('VFPOLEDB.1','C:\';'admin';'' ,'select * from dbf表名.DBF')
如果没有安装VFP,需要把vfpoledb.dll拷贝到SYSTEM目录下,并注册。

--方法三:
select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2;DATABASE=c:\','select * from dbf表名.dbf')

--方法四:
select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;HDR=NO;IMEX=2;DATABASE=c:\','select * from dbf表名.dbf')

--用前两种方法导入SQL SERVER后,源表再用VFP打开就不提示“不能存取文件”,说明语句执行后就把源表关闭了。不过也有不尽人意的地方,就是用前两种方法导入后,源表中的字符型字段导入后SQL表字段对应变成NVARCHAR了。
--第三种方法有一个缺点:把DBF表导入SQL Server中后,马上用VISUAL FOXPRO打开DBF表,会提示“不能存取文件”,即这个表还被SQL打开着呢。可是过了1分钟左右,再打开DBF表就可以了,说明经过一段时间后查询分析器才把这个表关闭。

--也可以只导几个字段
select * into 要生成的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\','select 字段1,字段2 from aa.DBF')

/*--说明:
SourceDB=c:\ c:\是dbf文件的存放目录
aa.DBF 是dbf文件名
--*/
TERRYYRRET 2006-04-11
  • 打赏
  • 举报
回复
是不是你的第二批表中有表的数据不符合规则啊
skyboy0720 2006-04-11
  • 打赏
  • 举报
回复
TO:楼上的
我查了联机丛书,看到这两个选项默认是OFF,于是我也这么想的!
可发现问题依然!
OracleRoob 2006-04-11
  • 打赏
  • 举报
回复
--try
--执行SQL前先执行

SET ANSI_NULLS ON
go

SET ANSI_WARNINGS ON
go

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧