问题标签 [sqlxml]

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 回答
1121 浏览

xquery - 使用 XQuery 访问 SQLXML 列中的子节点

我有一个数据库,其中有一个带有 XML 列的表。XML 数据有一堆看起来像这样的子节点:

Cat 元素可以有许多不同的值。我正在尝试创建有关此数据的报告,所以我想做的一件事是获取我们数据中所有类别的列表。这是我的查询:

这正确地使用这种类型的分类获取了我的表中的所有行(没有该元素的同一个表中会有其他结果),但是对于每个表记录,这些类别都组合成一列:

我包括了 Id 列,所以很容易看到数据来自哪里,主要问题是我只能让它连接每一行的值 - 我需要每个数据元素都有自己的行,然后也许对结果做一个 Select Distinct 。

有没有办法我可以做到这一点?

谢谢

0 投票
2 回答
193 浏览

sql-server-2008 - 用于大型 XML 列的复杂查询的 SQL 程序集与应用程序代码

我有一个包含一些关系列和一个 XML 列的表,其中有时包含相当大的数据块。我还有一个使用数据库的简单网络服务。我需要能够报告诸如 XML 列中某个元素的所有实例、某个元素的所有不同值的列表之类的事情。

我能够得到一个元素的所有不同值的列表,但没有比这更进一步。我最终编写了极其复杂的 T-SQL 代码来执行在 C# 中看起来非常简单的事情:遍历此表中的所有行,并将其 ( XPath | XQuery | XSLT ) 应用于 XML 列。我可以过滤关系列以减少数据量,但这对于某些查询来说仍然是很多数据。

我的计划是在 SQL Server 中嵌入一个程序集(我使用的是 2008 SP2)并让它为给定的查询动态创建一个索引视图(我有其他逻辑来清理这个视图)。这将使我能够降低网络流量,并且可能还允许我使用 Excel 和 MSRS 报告等工具作为廉价的用户界面,但我看到很多人说“只使用应用程序逻辑而不是 SQL 程序集” . (我想我可能在这里完全叫错了树)。

将大量数据抓取到 Web 服务并在那里进行处理也会有好处——我不受 SQL Server 环境的限制(因为我不住在其中),而且我的设置过程更容易。但这确实意味着我要通过网络传输大量数据,在处理数据时将其存储在内存中,然后将其中的一部分丢弃。

这里的任何建议将不胜感激。

谢谢

编辑:

谢谢大家,你们都帮了大忙。问题是我们在表中为一个文件生成一行,每个文件可能有多个结果,我们每次运行特定的构建作业时都会这样做。我想把它展平成一个表格视图。

此构建作业的每次执行都会检查数千个文件的多个属性,并且在某些情况下,这些测试中的每一个都会产生数千个结果(MSIVAL 测试是最严重的罪魁祸首)。

答案(呃!)是在它进入数据库之前把它弄平!根据您的反馈,我决定尝试为每个文件的每个测试的每个结果创建一行,而 XML 仅包含该结果的详细信息 - 这使得查询更加简单。当然,我们现在每次运行此工具时都有数十万行,但性能要好得多。我现在有一个视图,它创建了构建作业发出的一类结果的扁平化版本 - 这将返回 >200,000 并且需要 <5 秒,而我去之前的等效(复杂)查询大约需要 3 分钟更平坦的路线,旧(非数据库)版本的 XML 文件处理需要 10 到 30 分钟。

我现在对连接的次数有一些问题,但我知道如何解决这个问题。

再次感谢!全方位+1

0 投票
1 回答
554 浏览

xml - SQL Server FOR XML AUTO 帮助 - ChildNode 名称

我有这个查询

它生成 [几乎] 我需要的 XML。子节点只是命名错误。我已经尝试过多次切换别名,但终其一生都无法找出正确的方法。我得到这个 XML

如何更正问题,以便正确命名 [Activity] 子节点。我觉得我很接近。感谢您提供任何帮助、提示或技巧。

在圣地亚哥干杯,~ck

0 投票
3 回答
471 浏览

xml - 片段中的 SQL Server 2008 XML 更新?U

我有一个包含 50k 行的 SQL Server 2008 表,每行都有一个 XML 片段,varchar列中如下所示:

我需要选择varchar列,选择货币属性,将其更改为实际货币类型(在我的示例中为 3399.40),然后将整个片段放回去。

谁能指出如何让我度过这个难关?我想我需要创建某种 XML 索引?使困惑。

谢谢。

0 投票
1 回答
2569 浏览

asp.net - SQLXMLCommand 和部署到 IIS 6.0 时出错

尝试将我的 ASP.NET 应用程序从 VS2010 移动到我们的 IIS 6.0 网络服务器时出现错误。该错误发生在应用程序第一次尝试在登录页面上创建新的 SQLXMLCommand 对象时。

导航到登录页面并输入有效凭据时,我收到一条错误消息,指出引发了空引用异常。调查异常我们能够确定另一个异常被抛出和捕获,导致代码稍后出现空引用异常。

引发异常的相应代码行:

导致以下问题的异常:

由于以下错误,检索具有 CLSID {83D0FC3E-8B31-4B35-A1B2-346BA3954514} 的组件的 COM 类工厂失败:80040154 未注册类(来自 HRESULT 的异常:0x80040154(REGDB_E_CLASSNOTREG))。” System.Runtime.InteropServices.COMException (0x80040154):检索 COM 类工厂的 CLSID {83D0FC3E-8B31-4B35-A1B2-346BA3954514} 组件失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))。在 System.RuntimeTypeHandle .CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck)在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)在 System.RuntimeType。在 Microsoft.Data.SqlXml.SqlXmlCommand.fillManagedWrapper() 在 Microsoft.Data.SqlXml.SqlXmlCommand.construct( ) 在 Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) 在 dialog.login.UserLogin(String username, St 2011-Jun-15 11:40:52.104 CriticalError N/A 58 "http://sigappsdv/dialogue /login.aspx" dialog.login.UserLogin ---> "Webservice 在 System.RuntimeTypeHandle.CreateInstance 失败 2(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck) 在 System.RuntimeType.CreateInstanceSlow(布尔型 publicOnly,Microsoft.Data.SqlXml.SqlXmlCommand.fillManagedWrapper() 中 System.Activator.CreateInstance(Type type, Boolean nonPublic) 中 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)在 Microsoft.Data.SqlXml.SqlXmlCommand.construct() 在 Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) 在 dialog.login.UserLogin(String username, String password, String lang)"Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) 处的construct().login.UserLogin(String username, String password, String lang)"Microsoft.Data.SqlXml.SqlXmlCommand..ctor(String cnString) 处的construct().login.UserLogin(String username, String password, String lang)"

进一步查看问题,异常仅在 Web 服务器上引发。如果我使用 localhost,则不会引发异常。我虽然可能缺少对 Microsoft.Data.SqlXml.dll 的引用,因为它在本地主机上工作,而不是在网络服务器上。我尝试通过在我的部署项目中包含 dll 引用并确保将其添加到 bin 文件夹来解决此问题,但无济于事。

谢谢您的帮助。

编辑:

SQLXML 4.0 没有安装在我们的网络服务器上,它是我机器基线安装的一部分。

0 投票
2 回答
549 浏览

asp.net - 将 ASP.NET 应用程序部署到 Web 服务器时出现问题

将我的应用程序从本地计算机移动到 Web 服务器时出现错误。(我没有在我的本地主机上收到错误)

下面列出了引发异常的代码:

引发异常的特定行是:Dim oXR As XmlReader = cmd.ExecuteXmlReader()

日志信息显示以下异常:

例外 #1:

用户登录 - 抛出异常:必须将 SQLOLEDB 或 SQLNCLI 指定为数据提供者。” Microsoft.Data.SqlXml.SqlXmlException:必须将 SQLOLEDB 或 SQLNCLI 指定为数据提供者。---> System.Runtime.InteropServices.COMException:SQLOLEDB或 SQLNCLI 必须指定为数据提供者。在 Microsoft.Data.SqlXml.SqlXmlCommand.innerExecute(Stream strm) 的 Microsoft.Data.SqlXml.Common.UnsafeNativeMethods.ISQLXMLCommandManagedInterface.ExecuteToOutputStream() --- 内部异常堆栈跟踪结束 - -- 在 Microsoft.Data.SqlXml.SqlXmlCommand.ExecuteStream() 在 Microsoft.Data.SqlXml.SqlXmlCommand.ExecuteXmlReader() 在 dialog.login.UserLogin(String username, String password, String lang)

例外 #2:

“用户登录 - 抛出异常:来自 HRESULT 的异常:0x80040E14”Microsoft.Data.SqlXml.SqlXmlException:来自 HRESULT 的异常:0x80040E14 ---> System.Runtime.InteropServices.COMException:来自 HRESULT 的异常:Microsoft.Data.SqlXml 的 0x80040E14。 Common.UnsafeNativeMethods.ISQLXMLCommandManagedInterface.ExecuteToOutputStream() 在 Microsoft.Data.SqlXml.SqlXmlCommand.innerExecute(Stream strm) --- 内部异常堆栈跟踪结束 --- 在 Microsoft.Data.SqlXml.SqlXmlCommand.ExecuteStream()。 Data.SqlXml.SqlXmlCommand.ExecuteXmlReader() 在 dialog.login.UserLogin(字符串用户名,字符串密码,字符串语言)

第一个异常是使用 SQLOLEDB.1 作为我的提供程序出现的第一个错误,我开始使用不同的提供程序并得到第二个第二个异常。

有任何想法吗?

0 投票
1 回答
5073 浏览

sql - 将多个 XML 记录插入和更新到 SQL 2008 - 一种解决方案,但可能不是正确的?

好的,所以我有以下两个测试/示例查询来将 XML 中的数据插入和更新到 SQL 2008 表中。相当基本的东西,传入的 XML 结构将与 SQL 表的结构相匹配(当然更新只有必要的字段 - 再次只是一个示例)。

插入声明

所以,没有问题,两个 XML“记录”按照我们的需要插入。现在进入 UPDATE 语句:

更新声明

好的,所以更新有效 - 两个 XML“记录”的评论字段根据传递的更新

我的问题是

当然,鉴于上面的示例 UPDATE,where 子句来自 XML 而不是 TEST 表。所以当执行 UPDATE 时,查询说 100(如果说是表 TEST 中有多少条记录)记录更新..当然只有两条(在这种情况下)记录被更新了,但是 SQL 必须运行整个表??如果有意义的话,我想有没有办法以某种方式将 XML 中的 where 子句附加到底层 TEST 表?即限制测试只更新项目?

0 投票
1 回答
269 浏览

xml - SqlXml:OLEDB 的驱动程序错误?

我正在尝试从 sqlxml 执行这个存储的过程。我知道该命令永远不会到达 sql server,因为我已经使用探查器监视了流量。没有参数,我的 Exec 语句反映了这一点。OLEDB_SERVICES 的注册表中有一个值,我已经用其他有效的代码测试了连接字符串。我相信我可能有错误的 oledb 驱动程序,但不知道如何弄清楚我的驱动程序是什么以及如何替换它。

我的错误信息是:多步 OLE DB 操作生成错误。检查每个 OLE DB 状态值(如果可用)。没有做任何工作。

0 投票
3 回答
1181 浏览

sql-server - SQL 选择 FOR XML 到 Solr 文档中

我正在尝试获取一条 SQL 选择语句来生成符合 Solr 标准的 XML。

给定一个像这样的表:

我需要一个类似的结果(有或没有根节点):

是否可以使用FOR XML查询生成该结构,还是需要 XSLT 或其他机制来匹配该架构?

0 投票
1 回答
403 浏览

sqlxml - SQL Server 2008 R2 SQLXML 和 xpath 查询过滤器不起作用

运行 sql xml 时,我有以下架构返回四个项目:

我想得到:

但是在运行时它不会过滤。这是我使用的 xpath 查询:

这就是我得到的:

如果我使用以下查询:

我得到以下没有 iati-acitivties 元素:

有人知道我在做什么错吗?