问题标签 [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 投票
3 回答
7999 浏览

javascript - 使用 OPENROWSET 通过 SQL Server 访问 Oracle DB

我正在尝试使用客户端 Javascript 中的 OPENROWSET 通过 SQL Server 访问大型 Oracle 数据库,但运气不佳。以下是详细信息:

  • 使用 OPENROWSET 访问 Oracle 数据库的 SQL Server 视图运行良好,所以我知道我有有效的连接字符串参数。但是,新的要求是依赖于客户端选择的极其动态的 Oracle 查询,我无法让动态(甚至参数化的)Oracle 查询从 SQL Server 视图或存储过程中工作。
  • 对 SQL Server 数据库的客户端访问与动态和参数化查询完美配合。
  • 我不能指望拥有任何 Oracle 客户端软件的客户。因此,必须通过 SQL Server 数据库、使用视图、存储过程或使用 OPENROWSET 的动态查询来访问 Oracle 数据库。
  • 因为 SQL Server 数据库位于共享服务器上,所以我不允许使用全局链接数据库。

我的想法是定义一个函数,该函数将采用我自己版本的参数化 Oracle 查询,进行参数替换,将查询​​包装在 OPENROWSET 中,然后在 SQL Server 中执行,返回结果记录集。这是示例代码:

我得到的 SQL 错误对我来说Ad hoc access to OLE DB provider 'MSDAORA' has been denied. You must access this provider through a linked server.毫无意义。Microsoft 对此错误的解释与注册表设置 ( DisallowAdhocAccess) 有关。这在我的 PC 上设置正确,但这肯定与数据库服务器有关,而不是客户端 PC,我希望那里的设置是正确的,因为上面提到的视图有效。

我尝试过的一种替代方法是消除 Open 语句中的封闭 EXEC:

但这会产生相同的错误。

我还尝试将 OPENROWSET 放入存储过程中。这在 SQL Server Management Studio 中执行时完美运行,但在从 Javascript 调用存储过程时失败并显示相同的错误消息。

我正在尝试做的事情可能吗?如果是这样,你能推荐如何修复我的代码吗?或者是否需要完全不同的方法?

欢迎任何提示或相关信息。提前致谢。

0 投票
2 回答
4492 浏览

openrowset - 在 SQL 查询中运行 XMLA 语句?

我正在尝试在我的分析数据库上创建一个新角色。

我已经测试了多种组合:
当使用 Openrowset => 运行简单的 MDX 查询时,它可以工作。
运行时它可以工作。
尝试使用 openrowset=> ERROR 从 SQl 关系数据库创建新的 SSAS 角色时。

这是我正在尝试的代码

我收到的错误是:

请帮助 :)
问候,伊利

0 投票
8 回答
17472 浏览

excel - 如何在没有附加软件的情况下将 SSIS 导出到 Microsoft Excel?

这个问题很啰嗦,因为我很长时间以来一直在更新这个问题,试图让 SSIS 正确导出 Excel 数据。 我设法解决了这个问题,虽然不正确。除了有人提供正确答案之外,这个问题中列出的解决方案并不可怕。

我找到的唯一答案是为我的列创建一个足够宽的名为 range 的单行。在命名范围内放置样本数据并将其隐藏SSIS 附加数据并从单行读取元数据(足够接近它可以将内容放入其中)。 数据采用隐藏单行的格式。 这允许标题等。

哇,屁股好痛。需要 450 多天的出口才能弥补损失的时间。但是,我仍然喜欢 SSIS 并将继续使用它,因为它仍然比 Filemaker LOL 好得多。我的下一次尝试将在报表服务器中做同样的事情。


原始问题说明:

如果您在 Sql Server Integrations Services 设计器中,并且想要将数据导出到 Excel 文件,而不是从第一行开始,比如说第四行,您如何指定?

我尝试进入数据流的 Excel 目标,将 AccessMode 从变量更改为 OpenRowSet,然后将变量设置为“YPlatters$A4:I20000”这失败了,说它找不到工作表。该表称为 YPlatters。

我以为你可以指定 (Sheet$)(Starting Cell):(Ending Cell)?

更新

显然,在 Excel 中,您可以选择一组单元格并使用名称框命名它们。这允许您选择名称而不是不带 $ 美元符号的工作表。奇怪的是,无论您指定什么范围,它都会将数据附加到范围之后的下一行。奇怪的是,当您添加数据时,它会增加命名选择的行数。

另一个奇怪的事情是数据采用指定范围的最后一行的格式。我的标题行是粗体的。如果我指定以标题行结尾的范围,则数据将附加到下面的行,并使所有条目变为粗体。如果您指定低一行,它会在标题行和数据之间放置一个空白行,但数据不是粗体。

另一个更新

无论我尝试什么,SSIS 都会对文件的“第一行”进行采样,并根据找到的内容设置元数据。但是,如果您的样本数据的值为零但被格式化为第一行,它会将该列视为文本并插入前面带有单引号的数值 ('123.34)。我还尝试了不反映列数据类型的标题。我尝试更改 Excel 目标的元数据,但它总是在我运行项目时将其更改回来,然后失败说它会截断数据。如果我告诉它忽略错误,它会导入除该列之外的所有内容。

几天几小时后...

另一个更新

我尝试了每一种组合。一个最有效的示例是创建从列标题开始的命名范围。格式化列标题,因为您希望数据看起来像数据采用这种格式。在我的示例中,这些存在于 A4 到 E4 之间,这是我定义的范围。SSIS 追加到定义范围之后的行,因此定义 A4 到 E68 追加从 A69 开始的行。您将 Connection 定义为第一行包含字段名称。它采用标题行的元数据,奇怪的是,不是第二行,它猜测数据类型,而不是列的格式化数据类型,即标题是文本,所以我所有的元数据都是文本。如果您的标题是粗体的,那么您的所有数据也是如此。

我什至尝试制作示例数据行但没有成功......我认为没有人真正使用 Excel 和默认的 MS SSIS 导出。

如果您可以定义没有标题行的“插入范围”(A5 到 E5)并格式化这些列(货币、非粗体等)而不在 Excel 中跳过一行,这将非常有帮助。据我所知,没有人在没有第三方连接管理器的情况下使用 SSIS 导出 Excel。

关于如何正确设置以便正确格式化数据的任何想法,即从 Excel 读取的元数据适用于真实数据,并且格式继承自第一行数据,而不是 Excel 中的标题?

最后一次更新(2009 年 7 月 17 日)

我让它工作得很好。我添加到 Excel 中的一件事是 Excel 连接字符串中的 IMEX=1:“Excel 8.0;HDR=Yes;IMEX=1”。这迫使 Excel(我认为)查看所有行以查看其中的数据类型。通常,这不会删除信息,例如,如果您有一个邮政编码,那么您有一个 zip+4 的大约 9 行,没有这个的 Excel 会完全空白该字段而不会出错。当 IMEX=1 时,它识别 Zip 实际上是一个字符字段而不是数字。

当然,还有一次更新(2009 年 8 月 27 日)

IMEX=1 将成功导入前 8 行中缺少内容的数据,但将无法导出不存在数据的数据。所以,把它放在你的导入连接字符串上,而不是你的导出 Excel 连接字符串上。

我不得不说,经过这么多的摆弄,它工作得很好。

PS 如果您使用的是 x64 位版本,请确保从 C:\Program Files\Microsoft SQL Server\90\DTS.x86\Binn 调用 DTExec。它将加载 32 位 Excel 驱动程序并正常工作。

0 投票
3 回答
14860 浏览

sql-server - 使用 openrowset 将 Excel 文件读入临时表;我如何引用该表?

我正在尝试编写一个存储过程,它将一个 Excel 文件读入一个临时表,然后处理该表中的一些数据,然后将该表中的选定行插入到一个永久表中。

所以,它是这样开始的:

这似乎奏效了。

但是,如果我再尝试这样的事情:

我收到一个错误:

无效的对象名称“#mytemptable”

为什么无法识别 #mytemptable?有没有办法让存储过程的其余部分可以访问#mytemptable?

提前谢谢了!

0 投票
3 回答
53584 浏览

sql - SQL Server 使用 OPENROWSET 导出到 Excel

我使用以下语句成功导出到 excel:

是否有任何标准方法可以使用此模板为 excel 工作表指定一个新名称,以便模板永远不会被写入,或者我是否必须想出一些解决方法?

在人们的体验中,最好的方法是什么?

0 投票
5 回答
6149 浏览

tsql - TSQL 中的 OpenRowSet 命令返回 NULLS

已经调查了一段时间,一直在碰壁。我通过 OpenRowset 命令从 xls 文件导入临时表。现在我有一个问题,我试图导入某个列有一个范围值,但最常见的是以下。列结构为长数字,即 15598,一些列为字符串,即 15598-E。

现在 openrowset 正在读取字符串版本没有问题,但将数字版本报告为 NULL。我读到(http://www.sqldts.com/254.aspx)openrowset有这个问题,作者谈到在查询字符串中实现“HDR=YES;IMEX=1”,但这对我根本不起作用。

大家有没有遇到过这种情况?

只是一些更多的信息。我可能不会使用 JET 引擎 (Microsoft.Jet.OLEDB.4.0) 执行此操作,因此我的查询如下所示:

0 投票
6 回答
100833 浏览

sql-server-2005 - 无法为链接服务器“(null)”初始化 OLE DB 提供程序“MSDASQL”的数据源对象

有一个有趣的问题。我正在通过 Sql2005 中的 OpenRowset 从服务器上的 excel 文件中读取数据。我已经多次运行查询,没有任何问题。我刚出去参加一个快速会议,突然收到错误消息“无法为链接服务器“(null)”初始化 OLE DB 提供程序“MSDASQL”的数据源对象”

我确保这些文件没有在服务器上使用,甚至删除它们并将它们重新复制到服务器上,但我仍然遇到同样的错误。

更新:这似乎只有在我加入来自不同 openrowset 的两个选择时才会发生。如果我单独运行查询,它们仍然可以正常工作。我之前已经完成了加入,没有任何问题。想法?

0 投票
1 回答
5806 浏览

sql - 在指定另一列的值时在 INSERT 语句中使用 OPENROWSET?

我正在使用 OPENROWSET(BULK ...) 将文件的内容插入到我的表中。问题是我还需要在同一个 INSERT 语句中指定另一列的值。

我有这样的事情:

我确信有一种方法可以在这里指定不同列的值,但我不知道如何。

0 投票
1 回答
3529 浏览

sql-server - 在 SQL 中导入 'NULL' 行

我有一个存储过程,可以将不同格式的工作簿导入数据库表,对它们进行处理,然后删除表。

这是填充查询。

一些电子表格似乎在底部创建了一个空行。

如何导入和忽略空行?

0 投票
2 回答
12710 浏览

sql-server-2005 - OLE DB 提供程序“MSDASQL”尚未注册

我想从 .csv 文件中提取数据。我不能在 64 位机器上使用 OpenRowSet,因为它说:

并且在 SQL Server 2005 SSMS 的Linked Servers -> Providers部分中没有 MSDASQL 条目,与 32 位的相同。

有人可以建议一种类似的方法来从 .csv 文件中提取数据吗?