问题标签 [openrowset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11539 浏览

sql-server - 从 SQL 连接到 Web 服务

SQL Server 能够使用数据提供程序(例如 JET、ACE)和 OPENROWSET 打开 excel 表格 (xlsx)、访问数据库 (mdb) 和其他数据流。

是否有类似的工具可以从远程 Web 服务中提取数据?使用 OPENROWSET 并为其提供 Web 服务驱动程序和 URL 以及一些架构定义,以将 Web 服务 XML 输出的分层性质转换为 SQL Server 可以查询的表。

我在想类似的东西:

这是一个高层次的问题,虽然我知道这在概念上是可能的,但我想知道这个想法是否有任何实现。

谢谢

0 投票
10 回答
56664 浏览

tsql - 如何解决“找不到可安装的 ISAM”。OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的错误

我正在尝试使用带有“Microsoft.ACE.OLEDB.12.0”OLE DB 提供程序的 T-SQL OpenRowset() 命令将 Excel 2007 (.xlsx) 文件中的数据导入 SQL Server 2008,并且我得到了一个持久的“找不到可安装的 ISAM”错误。所有硬件都是 32 位的。

[2012 年 1 月 10 日修订,试图更清晰地关注异常]

以下 T-SQL 语句产生错误:

如果我将 Excel 文件保存为“Excel 97-2003”格式 (.xls) 并使用较旧的 Microsoft.Jet.OLEDB.4.0 提供程序导入数据,它就可以正常工作。这让我认为这不是安全或其他环境问题。

但是,当我尝试使用 Microsoft.ACE.OLEDB.12.0 提供程序(应该向后兼容 *.xls 格式)的 *.xls 文件时,它再次失败并出现相同的错误:

此外,有趣的是,当我使用 SSMS“导入数据...”向导时,它工作正常。我将导入数据向导输出保存为 SSIS 包,并查看了 SSIS 文件以试图弄清楚它是如何工作的,并且它成功地使用了 Microsoft.ACE.OLEDB.12.0 提供程序。这是来自 SSIS 包的连接字符串:

我还完成了相关的 SQL Server 配置以允许 OPENROWSET 分布式查询:

如果我还设置了以下 *sp_MSset_oledb_prop* 值(我在某处的帖子中找到)...

...然后错误更改为“未指定的错误”:

但是,我不确定这是上游还是下游错误。(现在是否找到“可安装的 ISAM”但随后失败?)

我已经在两台不同的机器/操作系统(Windows Server 2003、Windows XP SP3)上尝试了多个 Excel 文件。两台机器都是 32 位的。

我还尝试重新安装 AccessDatabaseEngine.exe 的 Office 2007 和 Office 2010 版本(http://www.microsoft.com/download/en/details.aspx?id=23734http://www.microsoft .com/download/en/details.aspx?id=13255,分别),无济于事。

总结一下:

  • “Microsoft.Jet.OLEDB.4.0”提供程序使用 T-SQL 工作,但“Microsoft.ACE.OLEDB.12.0”不能。
  • “Microsoft.ACE.OLEDB.12.0”使用“导入数据...”向导工作(据我从保存的 SSIS 作业文件中得知)。
  • 将“AllowInProcess”和“DynamicParameters”属性设置为“1”会将错误更改为“未指定错误”。(这是向前迈出的一步吗?!)

有什么想法吗?

0 投票
4 回答
8641 浏览

sql - OPENROWSET - 如何以文本形式阅读所有内容?

我正在使用以下命令将数据加载到 SQL Server:

问题在于,显然驱动程序试图猜测每个字段的数据类型,并且在转换失败的地方它只是读取一个空值。例如,假设我有以下

似乎认为“SomeCode”是一个整数,它会将“ABC”读作 NULL。有什么办法可以阻止这种情况发生。我想要的只是将数据一直作为 varchars 处理。

有任何想法吗?

0 投票
2 回答
2958 浏览

sql - 如何在 SQL Server 中解析来自 CLOB 的数据?

我想使用带有 BULK 命令的 OPENROWSET 将数据作为 CLOB 加载到 SQL Server 中,并作为解析 CLOB 并加载读取数据作为表的第二步。

例如:

产量:

我想选择这个:

0 投票
2 回答
859 浏览

c# - C# 应用程序从 MySQL 中选择数据并插入到 SQL 服务器(blob 文件)

我想在 MySQL 数据库上运行查询并将结果插入 SQL-Server 2008 R2 数据库。

在我的表(MySQL 数据库)中有多个列,其中之一包含一个文件路径。我想使用该路径将实际文件作为 BLOB 插入到我的 SQL 服务器中。

因此,MySQL 中的所有列都需要插入到 SQL-server 中,并且实际文件为 BLOB。

我可以连接和查询 MySQL 数据库,也可以连接我的 SQL-Server。但是我怎样才能插入结果。(有些文件非常大!!)

我发现了一些关于 OPENROWSET 的东西,但我找不到插入元数据文件的好例子。

我想为此编写一个 C# 应用程序。我很感激任何帮助。

0 投票
1 回答
787 浏览

visual-studio-2010 - 如何在数据库项目的部署中引用与项目根目录相关的文件?

我在 Visual Studio 2010 中有一个数据库项目,在部署后脚本中,我想将两个文件中的二进制数据导入数据库。为此,在从部署后脚本文件引用的文件中,我的代码非常类似于以下内容:

以前奏效过。我不确定它在什么时候停止工作,但现在,我似乎得到的只是错误SQL01262: The variable 'ProjectDirectory' has not been defined(具有讽刺意味的是,部署后脚本本身的错误位置,第 0 行第 0 列)。我翻遍了项目根目录下的文件,发现它有点像在项目文件本身中定义的,它在顶级<Project>节点中有以下内容:

在上面的代码片段中更改$(ProjectDirectory)$(MSBuildProjectDirectory)除了错误消息中的变量名之外没有任何改变。该错误发生在部署的验证阶段,而不是部署本身。

在部署后脚本中,参考相对于项目根目录的文件的正确方法是什么,以便将这些文件的内容包含在数据库部署中?

0 投票
2 回答
6507 浏览

sql-server - SQL Server 2005 OPENROWSET 插入 Excel - 文本到数字格式

所以这不是什么大不了的事,但由于谷歌没有返回任何关于它可能是 Excel 驱动程序问题的最新信息(主要是 2007 年左右)......我来这里是为了问这个问题,因为我发现的“答案”不是可以接受,无需进一步研究。

我的问题:

编写动态 OPENROWSET 查询清除并插入新数据以向特定用户发送报告 - 基本 excel 报告包含一些公式,其中它根据插入的数据计算和求和,并且乘法公式似乎工作正常,但除非总计在 Excel 中被正确格式化为“数字”而不是文本,总和将不起作用......

解决方案必须是基于自由格式的(如果有解决方案的话),我不想将我的所有代码都转移到 SSIS ......

更新/插入代码:

第二个问题,现在可能不是问题,但稍后 - 在插入之后,它似乎在结果周围创建了边界。是否还有一种潜在的方法可以在结果传输期间删除它们?

如果是驱动程序问题,请提供任何帮助或研究资源,因为我找不到任何帮助或资源。

0 投票
1 回答
3366 浏览

sql-server - 使用 OPENROWSET MSG 7399/7303 将 SQL Server 2005 转换为 Excel

我的耐心到此为止。我通过 SSMS 或代理运行作业,这些作业直到上周都运行良好,将表/视图中的数据插入到各种 Excel 文件中。

最近,作业/代码一直在运行,而从未完成……这些作业过去只需要 15-25 秒即可完成,但现在永远不会结束。我已经在一张新表上测试了下面的代码,它会立即运行!我得到的错误也没有帮助,我在谷歌中找到的解决方案没有帮助或者已经设置好了。

有什么想法会导致 openrowset 导出只是轰炸而不做它的工作吗?

我通常运行的代码有效:

当前的错误信息:

消息 7399,级别 16,状态 1,第 1 行
链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”报告错误。提供商没有提供有关该错误的任何信息。
消息 7303,级别 16,状态 1,第 1 行
无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。

系统:

  • Windows XP 32 位上的 SQL Server 2005 32 位

更新/编辑信息:

  • Excel 工作表包含单独选项卡上的函数或从 [Data$] 选项卡推断数据的图表(如果有任何帮助)

  • 我创建了一个全新的工作表并测试了我的插入查询,它运行良好

  • 源文件最初不是在服务器上创建的,而是通过共享驱动器传输的(不过我认为这无关紧要)

任何帮助表示赞赏!

谢谢

0 投票
1 回答
22603 浏览

sql-server - 带有 Excel 文件的 OPENROWSET

我想执行简单的语句:

今天早上我突然收到这条消息:

它一直工作到今天早上!

这是我的服务器规格:Windows 2008 R2 64 位 SQL Server 2008 64 位

我已经安装了 AccessDatabaseEngine_x64.exe。

Sql Server 在 LocalService 帐户下运行。我已将每个人都设置为对“C:\Temp”和“C:\Windows\ServiceProfiles\LocalService\AppData\Local”拥有完全控制权限。

有什么我错过的吗?我真的很困惑...

编辑:我还执行了这些语句:

我还ACE.OLEDB.12.0使用管理员帐户进行了测试:

还有一个错误:

最后我找到了:我运行了 ProcMon,看到 Sql Server 想要访问 F:\Windows Temp\ 并且该文件夹不存在!我创建了文件夹,问题就解决了。但是,我从来没有这样的文件夹!

0 投票
1 回答
672 浏览

tsql - SQL Server openrowset() 测试 MS Access 表中的列数

没有通过谷歌找到答案。我需要从 SQL Server 存储过程中执行此代码。

我有一个包含 100 多个访问数据库的文件夹,其中包含一个名为 tblReports 的表。一些访问数据库在 tblReports 中有一个额外的列,称为 AdminReport。

如果存在额外的列,我需要捕获它,因此...我需要测试 tblReports 中有多少列,以便我可以在 sp 中使用 if/else 语句根据列数生成正确的 sql。

我很想阅读您的想法,这是相关的片段。