来自Excel的ODS查询返回虚假列名称

时间:2010-09-23 15:47:57

标签: sql-server-2005 tsql oledb linked-server

检索Excel工作表命名区域时,它返回虚假列名称

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.".
Msg 7320, Level 16, State 2, Line 1
Cannot execute the query "SELECT `Tbl1005`.`CUSTOMER` AS `Col1031`,`Tbl1005`.`NAME` AS `Col1032`,`Tbl1005`.` 1AA00` AS `Col1033`,`Tbl1005`.` 1AB00` AS `Col1034`,`Tbl1005`.` 1AC00` AS `Col1035`,`Tbl1005`.` 1AD00` AS `Col1036`,`Tbl1005`.` 1AE00` AS `Col1037`,`Tbl1005`.` 1AF00` AS `Col1038`,`Tbl1005`.` 1AG00` AS `Col1039`,`Tbl1005`.` 1AH00` AS `Col1040`,`Tbl1005`.` 1AL00` AS `Col1041`,`Tbl1005`.` 1AM00` AS `Col1042`,`Tbl1005`.` 1AN00` AS `Col1043`,`Tbl1005`.` 1AO00` AS `Col1044`,`Tbl1005`.` 1AP00` AS `Col1045`,`Tbl1005`.` 1AQ00` AS `Col1046`,`Tbl1005`.` 1ZA00` AS `Col1047`,`Tbl1005`.` 1ZD00` AS `Col1048`,`Tbl1005`.` 4AN00` AS `Col1049`,`Tbl1005`.` 4AO00` AS `Col1050`,`Tbl1005`.` 4ZB00` AS `Col1051`,`Tbl1005`.` 5ZA00` AS `Col1029` FROM `CPGROUPS` `Tbl1005`" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

如何解决此问题?

4 个答案:

答案 0 :(得分:2)

我遇到了一张带有第一行前导空格的工作表,用作字段名称。电子表格设置为链接服务器

错误消息是:

Msg 7320,Level 16,State 2,Line 1 无法执行查询“SELECT Tbl1002Participant AS Col1019 FROM DATASET$ Tbl1002“对于链接服务器”XXXXX“的OLE DB提供程序”Microsoft.ACE.OLEDB.12.0“。

领先的空间被移除后,它起作用了。

使用以下方式设置链接服务器:

exec sp_addlinkedserver @server = N'XXXXX', 
@srvproduct=N'Excel', @provider=N'Microsoft.ACE.OLEDB.12.0', 
@datasrc=N'\\somewhere\some_dir\mysheet.xlsx',
@provstr=N'EXCEL 12.0;Hdr=Yes' ;

答案 1 :(得分:1)

对于dBase的查询,我收到了同样的错误。该错误是由OPENDATASOURCE的查询结果达到255列限制引起的。我相信该消息只是来自SQL Server的内部调用,将结果加载到内存中并将其解析为结果集。它们不代表真正的列名或与最终输出相关的任何内容。

我通过指定一个总字段名少于255的硬编码列列表解决了我的问题。

答案 2 :(得分:0)

硬编码列名称对我来说不是一个选项,因为我既不知道列数也不知道它们的名字。 我通过指定

重新解决了这个问题

从OpenDataSource中选择*('Microsoft.ACE.OLEDB.12.0','Data Source =“\ xxxx \ x.xls”;扩展属性=“Excel 12.0; HDR =是; IMEX = 1”').. .cpGroups

并且允许Inproc = True,在SQL Server中的提供程序(ACE.Oledbb.12.0)上仅为零级= 1

希望我学到的东西可以帮助某人

此致

答案 3 :(得分:0)

当我删除@Jim所提到的字段名称中的前导空格(即电子表格中的列标题)时,错误消失了,但是:

  • 重复的字段名称 - 我认为这是最大的问题
  • 跟踪字段名称