Tag: openrowset

OpenRowset Excel读取顺序

我正在使用MS SQL 2012读取Excel工作表(Excel 2010)。 Excel工作表可能具有可变数量的列和可变模式,其范围可以从一百到几千。 我需要读取每个logging到一个临时表,然后正常化。 我从此开始使用OpenRowset > Insert into #temp FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', > 'Excel 12.0;HDR=YES;Database=c:\dir\test.xlsx', > 'SELECT * FROM [sheet1$]'); 我很快意识到,这种方法允许我一次读取的最大列数为255.一些快速的研究声明,这是驱动程序“Microsoft.ACE.OLEDB.12.0”的限制。 所以当我有大量的列(> 255)excel文件,这种方法失败。 除了加载之外,单个表中的列可能会造成另一个超过表格8060页面大小限制的问题。 所以我改变了我的方法,并决定做多个读取并循环openrowset命令,以便它一次读取200列,并将其加载到临时表。 我可以通过将excel列范围追加到工作表名称[sheet1 $ A:GR]来指定范围,该命令看起来像 > Insert into #temp01 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', > 'Excel 12.0;HDR=YES;Database=c:\dir\test.xlsx', > 'SELECT * FROM [sheet1$A:GR]'); 一旦我把它放在适当的循环中,我可以读取整个Excel表格,创build几个临时表格,这些表格放在一起会给我所有的列。 把这些临时表放在一起得到一个完整的logging,我打算使用一个联接,也许是一个视图,这里是我偶然发现的一个问题。 OpenRowset是否会维护读取顺序,使得在Excel中logging一个logging将在所创build的所有临时表中logging为1,其他logging则如此logging? 如果维护顺序,我可以简单地joinSQL行号,如果不是我应该怎么做呢? 感谢在这方面的任何帮助/build议。

OPENROWSET与Excel文件

我想执行简单的声明: SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]') 突然我今天早上收到这个消息: Msg 7308, Level 16, State 1, Line 1 OLE DB provider 'MICROSOFT.JET.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode. 它一直工作到今天早上! 这里是我的服务器规格:Windows 2008 R2 64位SQL Server 2008 64位 我已经安装了AccessDatabaseEngine_x64.exe。 Sql Server正在LocalService帐户下运行。 我已经设置每个人拥有“C:\ Temp”以及“C:\ Windows \ ServiceProfiles \ […]

BCP实用工具创build格式文件,将Excel数据导入到SQL Server 2008以进行BULK插入

我试图将Excel 2003数据导入到SQL Server 2008的SQL表中。 试图添加一个链接的服务器,但遇到了一点成功。 现在我试图检查是否有一种方法可以使用BCP实用程序来使用OPENROWSET执行BULK插入或BULK操作,使用格式文件来获取Excel映射。 首先,我怎样才能创build一个表格的格式文件,与Excel电子表格列有不同的命名列? 接下来,如何使用这个格式文件将数据从C:\ Folder1 \ Excel1.xsl文件中导入到表格Table1中? 谢谢。

如何使用OPENROWSET获取列名?

我正在转换EXCEL文件中包含的一些数据,我正在使用OPENROWSET来执行此操作。 我可以用select * type语法获取数据,但是我没有在结果中find任何列名。 在这种情况下,结果是一个简单的值,我想使用或放置在临时表或variables。 但是,该值在最后一个select语句中返回为NULL。 我在这里错过了什么? OLEDB调用中的SQL语法是否正确(似乎是有限的)? declare @catalog_ID nvarchar(100); set @catalog_ID = (select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=yes;Database=D:\[my-worksheet].xlsx','SELECT * FROM [ru_RU$a3:b3]') ) select @catalog_ID;

SQL查询使用Openrowset从Excel 2016中提取数据 – 获取语法错误

这个查询给了我一个语法错误附近的文件位置的末尾的逗号,就在这之前。 谁能告诉我为什么? 我已经无济于事了 我正在使用SQL Server 2014 Express和Excel 2016。 谢谢 INSERT INTO Simply_Capitation_Lineal (uniqueid, mos, groupid, GroupName, mos2, QnxMemID, dob, age, sex, mname, CapRateID, CapTermID, CapEffDate, CapAmount, CapAffID, PCPProvid, PCPFullName, PayToAffID, PayToProvid, PayToName, CapDate, PlanID, MedicareID, Simple_County, [cover&OME], Triangle_Cover, CarrierMemberID, CheckNumber) SELECT uniqueid, mos, groupid, GroupName, mos2, QnxMemID, dob, age, sex, mname, CapRateID, CapTermID, CapEffDate, CapAmount, […]

dynamicCREATE TABLE命令只创build“通用”列数据types(Excel连接)

我想将DB中的所有表导出为Excel文件。 这个过程应该是dynamic的,因为DB中的表格可能会有所不同。 目前的过程是使用SSIS如下: 生成一个CREATE TABLEstring。 在Excel CM中Execute Sql任务时使用该string,该CM创buildExcel文件。 生成一个INSERT INTO OPENROWSET… SELECT FROM …命令string。 在SQL SERVER CM的Execute Sql Task中使用这个string。 问题是,创build的Excel文件列types都是“一般”,即使我的脚本另有说明。 一个示例CREATE TABLE脚本: CREATE TABLE `CONTACT1` ( [ACCOUNTNO] LongText, [COMPANY] LongText, [CREATEON] datetime, [CREATEAT] LongText, ) 用数据types“玩”没有帮助。 例如,使用VARCHAR(1000)而不是LongText等 我试着生成xlsx和xls文件。 这个问题阻止了我以后插入数据时使用*INSERT INTO OPENROWSET(…) SELECT FROM …*命令。 一个示例INSERT INTO脚本: INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=c:\\junk \\accountnoWithNoApps.xlsx;HDR=YES;IMEX=1\"', 'SELECT [accountno], [COMPANY], [CREATEON], […]

SQL Server使用OPENROWSET导出到Excel

我成功出口到以下声明: insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\template.xls;', 'SELECT * FROM [SheetName$]') select * from myTable 是否有任何标准的方式来使用这个模板指定一个新的名称为Excel表,使模板永远不会被写入或我必须想出一些解决办法? 在用户体验中做到这一点的最佳方式是什么?

如何将SSIS导出到Microsoft Excel而无需其他软件?

这个问题很漫长,因为我试图让SSIS正确导出Excel数据很长时间以来一直在更新这个问题。 我设法解决这个问题,虽然不正确 。 除了提供正确答案的人之外,这个问题中列出的解决scheme并不可怕。 我find的唯一答案是创build一个足够宽的足够我列的单行 。 在指定的范围内放置示例数据并将其隐藏 。 SSIS追加数据并从单行读取元数据 (足够接近以便放入内容)。 数据采用隐藏的单行格式。 这允许标题等 哇,屁股是多么的痛苦。 这将需要超过450天的出口来弥补损失的时间。 不过,我仍然喜欢SSIS,并继续使用它,因为它比Filemaker LOL还要好。 我的下一个尝试将在报表服务器上做同样的事情。 原始问题笔记: 如果您使用的是Sql Server集成服务devise器,并且希望将数据导出到从第一行开始的某个Excel文件,那么可以说第四行,您如何指定它? 我试着进入数据stream的Excel目的地,将AccessMode从variables改为OpenRowSet,然后将该variables设置为“YPlatters $ A4:I20000”,这表示无法find工作表。 该表被称为YPlatters。 我以为你可以指定(Sheet $)(起始单元格):(结束单元格)? 更新 显然,在Excel中,您可以select一组单元格并使用名称框命名它们。 这允许您select名称而不是没有$美元符号的工作表。 奇怪的是,无论你指定的范围,它将数据追加到范围后面的下一行。 奇怪的是,当你添加数据时,它增加了命名select的行数。 另一个奇怪的是,数据采用指定范围的最后一行的格式。 我的标题行是粗体的。 如果我指定以标题行结尾的范围,则数据将附加到下面的行,并使所有条目变为粗体。 如果指定一行较低,则在标题行和数据之间放置一个空行,但数据不是粗体。 另一个更新 无论我尝试什么,SSIS都会对文件的“第一行”进行采样,并根据find的内容设置元数据。 但是,如果您的示例数据的值为零,但格式设置为第一行,则将该列视为文本,并在前面插入单引号的数字值('123.34)。 我也尝试了不反映列的数据types的标题。 我尝试更改Excel目标的元数据,但是在运行项目时总是将其更改回来,然后无法将其截断数据。 如果我告诉它忽略错误,它会导入除列以外的所有内容。 几天后的几个小时… 另一个更新 我尝试了所有的组合。 一个主要工作的例子是创build从列标题开始的命名范围。 格式化您的列标题,因为您希望数据看起来像数据采取这种格式。 在我的例子中,这些是从A4到E4,这是我定义的范围。 SSIS附加到定义的范围之后的行,所以定义A4到E68附加从A69开始的行。 您将连接定义为第一行包含字段名称。 它占据了标题行的元数据,奇怪的不是第二行,而是猜测数据types,而不是列的格式化数据types,即标题是文本,所以我所有的元数据都是文本。 如果您的标题为粗体,那么您的所有数据也是如此。 我什至试图做一个示例数据行没有成功…我不认为任何人实际上使用默认的MS SSIS导出Excel。 如果你可以定义没有标题行的“插入范围”(A5到E5),并将这些列(货币,不是粗体等)格式化而不跳过Excel中的行,这将是非常有帮助的。 从我收集,没有人使用SSIS导出Excel没有第三方连接pipe理器。 […]

TSQL中的OpenRowSet命令返回NULLS

现在调查了一会儿,并不断碰到一堵砖墙。 我正在通过OpenRowset命令从xls文件导入临时表。 现在我有一个问题,我试图导入某个列有一个范围值,但最常见的是以下几点。 列结构为长数字,即15598和一些列作为string,即15598-E。 现在openrowset正在读取string版本没问题,但报告数字版本为NULL。 我阅读( http://www.sqldts.com/254.aspx)openrowset有这个问题,作者说在查询string中实现“HDR = YES; IMEX = 1”,但这根本不适用于我。 有没有人遇到过这个? 只是一些更多的信息以及。 我可能不会使用JET引擎(Microsoft.Jet.OLEDB.4.0)做到这一点,所以这是我的查询看起来像: SELECT * FROM OPENROWSET('MSDASQL' , 'Driver=Microsoft Excel Driver (*.xls);HDR=YES;IMEX=1;DBQ=C:\ImportFile.xls;' , 'SELECT * FROM [Sheet1$]')

SQL Server:无法初始化链接服务器的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象“(空)”

我正在尝试运行以下查询: SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Somefile.xlsx', 'SELECT * FROM [Sheet$]') 但是我得到这个错误: Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 我尝试了以下内容: sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO 和: USE [master] GO EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , […]