我们有一个奇怪的系统,我们正在与之集成,它使用 XML,但它不理解自闭合标签,所以
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE />
</BOOKING>
Run Code Online (Sandbox Code Playgroud)
超出了它的能力。
如果我拥有的是declare @x xml,我如何将其转换@x为字符串而没有自关闭标签:
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE></PERSONCODE>
</BOOKING>
Run Code Online (Sandbox Code Playgroud) 有什么方法可以至少将表模式从 MSSQL 或 MySQL 导出到 DTD 文件吗?表的数据到 XML 也是一样的。
我真的不知道如何编写 DTD,所以我非常需要一个生成器,看看我是如何设置数据库的,我会说这是最简单的方法吗?
我需要构建一个带有父记录和 1..N 个相关子记录的 XML 包。
子记录是父节点下的一个节点,每个父节点可能有一个或多个子记录。在同一个查询中也可以有多个父项。
上面的查询我没有问题。
我还要求为每条记录(父项和子项)提供一个唯一的基于 0 的索引。我可以ROW_NUMBER为每个子查询使用 with ,但无法找到一种方法来为整个查询中的每条记录获取唯一索引。
(请注意,SQLFiddle 不会以非常易于阅读的格式显示 XML,因此您可能希望在本地 SSMS 中运行它。)
工作SSMS代码如下:
BEGIN TRY
DROP TABLE #Child
DROP TABLE #Parent
END TRY
BEGIN CATCH
END CATCH
CREATE TABLE #Parent
(RecId int PRIMARY KEY NOT NULL,
PersonName varchar(100), Age int)
CREATE TABLE #Child
(ChildID int identity PRIMARY KEY NOT NULL,
ParentRecId int FOREIGN KEY REFERENCES #Parent(RecId),
SalesAmt money)
INSERT INTO #Parent
(RecID, PersonName, Age)
VALUES
(1, 'Aaron Bertrand', 99),
(2, 'Paul White', …Run Code Online (Sandbox Code Playgroud) 我有一个生成 XMLTYPE 的过程,我想根据模式对其进行验证。问题是运行 createSchemaBasedXML 似乎存在权限问题,因为当我以 AUTHID DEFINER 运行该过程时,它给出错误“ORA-31050:拒绝访问”,但是当我以 AUTHID CURRENT_USER 运行它时,它实际上返回了一个特定于验证的错误(我会单独处理)。CURRENT_USER 不是可接受的解决方案。
我的假设是 CURRENT_USER 有效,因为用户具有 XMLADMIN 角色。授予角色包含的权限并不能解决问题,因此必须是角色能够绕过 ACL。
问题是,查询 RESOURCE_VIEW 以获取保护资源的 ACL 表明它受/sys/acls/all_owner_acl.xml. DBMS_XDB.getPrivileges显示 xsd 具有以下所有权限:
<read-properties/>
<read-contents/>
<write-config/>
<link/>
<unlink/>
<read-acl/>
<write-acl-ref/>
<update-acl/>
<resolve/>
<link-to/>
<unlink-from/>
<dav:lock/>
<dav:unlock/>
<dav:write-properties/>
<dav:write-content/>
<dav:execute/>
<dav:take-ownership/>
<dav:read-current-user-privilege-set/>
Run Code Online (Sandbox Code Playgroud)
使用DBMS_XDB.getAclDocument表明主体dav:owner拥有所有权限,因此这不足以允许模式的所有者创建基于模式的 XML。考虑到这个想法,我创建了一个块来运行DBMS_XDB.createResource创建一个新的 ACL。我可以成功创建 ACL,并且从 SQLDeveloper 我可以看到它存在于我创建它的位置。
在这个过程中有很多地方我可能会出错,所以我正在寻找的核心是:
必须具备哪些条件才能根据模式验证 XMLTYPE?
=== 2013 年 4 月 3 日更新 ===
我可以将我的 xsd 文件的 acl 设置/sys/acls/all_all_acl.xml为/sys/acls/all_owner_acl.xml. 和以前一样,这些都不能解决权限问题。我还尝试了使用从 …
任何人都可以帮助我修复将 XML 数据导入 SQL Server 表的解决方案吗?我已经完成了我的研究,但这项任务对我来说很难完成。我发现的所有内容都适用于简单数据,但我的名称和值在“website_details”部分中是分开的。这就是为什么我的脚本没有工作的原因。我有大约 200 个 XML 文件,其中一些文件要导入一千多条记录,因此我无法更改它们的结构。我正在处理的数据被视为机密,因此我更改了值名称和值,以便我可以发布此信息。
网站表的第一个插入命令完美运行并导入了我的所有数据。我遇到的问题是第二个插入命令。@xmlData.nodes 定义是我认为问题所在。在“website_details”部分,我很难定义结构,因为与其他信息不同,名称和值是分开的。
只是为了概述我的数据库目前它由两个表组成。它们是网站和website_details。该Web_ID列包含两个表中,并且是website_details连接到网站的外键。我还有一个视图,我用它来组合名为website_view 的数据。
这是从我的 XML 文件中提取的示例数据:
<WEBSITES>
<WEBSITE>
<WEBSITE_ID>sta001</WEBSITE_ID>
<WEBSITE_ALTERNATE_ID/>
<WEBSITE_VERSION>4</WEBSITE_VERSION>
<TYPE>DYNAMIC</TYPE>
<NAME>TEST WEBSITE</NAME>
<WEBSITE_DETAILS>
<WEBSITE_DETAIL>
<NAME>COST</NAME>
<VALUE>500</VALUE>
<INHERITED>false</INHERITED>
</WEBSITE_DETAIL>
<WEBSITE_DETAIL>
<NAME>LANGUAGE</NAME>
<VALUE>EN</VALUE>
<INHERITED>false</INHERITED>
</WEBSITE_DETAIL>
<WEBSITE_DETAIL>
<NAME>DATABASE</NAME>
<VALUE/>
<INHERITED>false</INHERITED>
</WEBSITE_DETAIL>
</WEBSITE_DETAILS>
</WEBSITE>
<WEBSITE>
<WEBSITE_ID>mmn023</WEBSITE_ID>
<WEBSITE_ALTERNATE_ID/>
<WEBSITE_VERSION>3</WEBSITE_VERSION>
<TYPE>DYNAMIC</TYPE>
<NAME>TEST WEBSITE 2</NAME>
<WEBSITE_DETAILS>
<WEBSITE_DETAIL>
<NAME>COST</NAME>
<VALUE>750</VALUE>
<INHERITED>false</INHERITED>
</WEBSITE_DETAIL>
<WEBSITE_DETAIL>
<NAME>LANGUAGE</NAME>
<VALUE>RU</VALUE>
<INHERITED>false</INHERITED>
</WEBSITE_DETAIL>
<WEBSITE_DETAIL>
<NAME>DATABASE</NAME>
<VALUE>TRUE</VALUE>
<INHERITED>false</INHERITED>
</WEBSITE_DETAIL>
</WEBSITE_DETAILS>
</WEBSITE>
</WEBSITES>
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的存储过程:
USE …Run Code Online (Sandbox Code Playgroud) 每个星期五我都必须将几个(有时超过 300 个)XML 文件导入到 2 个表中。
其中一张表的结构R000000如下所示:
R00000010 | R00000020 | R00000030 | R00000040 | R00000050 | R00000060
---------- ------------ ---------- ----------- ----------- ----------
R000000 | I | 0002 | 1 | 2 | 0026
R000000 | I | 0003 | 1 | 2 | 0025
R000000 | I | 0004 | 1 | 2 | 0021
R000000 | I | 0006 | 1 | 2 | 0023
R000000 | I | 0001 | 1 | 2 | …Run Code Online (Sandbox Code Playgroud) 我需要在 TSQL 中使用 XSD 验证 XML。为了使此任务半自动化,我需要在 TSQL 函数中执行此操作。
为了进行验证,我必须将值设置为 XML,如果它无效,我将收到一个错误。
我的问题是在 TSQL 函数内部我不能使用TRY / CATCH. 这是正确的方式吗,如果有可能做到这一点?
I'm new to SQL Server and I have this task to complete (for learning purposes), yet I'm unable to figure out this error due to inexperience with XML Schemas (I think)
Here's what I'm trying to do -
我有一个具有这种结构的 XML 响应,但有大约 150 个不同的节点:
<?xml version="1.0" encoding="UTF-8"?>
<Orders>
<Order>
<OrderID>334</OrderID>
<AmountPaid currencyID="EUR">17.10</AmountPaid>
<UserID>marc58</UserID>
<ShippingAddress>
<Name>Marc Juppé</Name>
<Address>Rue</Address>
<City>Paris</City>
<StateOrProvince></StateOrProvince>
<Country>FR</Country>
<Phone>333333333</Phone>
<PostalCode>22222</PostalCode>
</ShippingAddress>
<ShippingCosts>4.50</ShippingCosts>
<Items>
<Item>
<Details>
<ItemID>3664</ItemID>
<Store>47</Store>
<Title>MCPU DDA010</Title>
<SKU>mmx</SKU>
</Details>
<Quantity>1</Quantity>
<Price currencyID="EUR">6.2</Price>
</Item>
<Item>
<Details>
<ItemID>3665</ItemID>
<Store>45</Store>
<Title>MCPU DFZ42</Title>
<SKU>mmy</SKU>
</Details>
<Quantity>2</Quantity>
<Price currencyID="EUR">3.2</Price>
</Item>
</Items>
</Order>
</Orders>
Run Code Online (Sandbox Code Playgroud)
我需要将此信息存储到 3 个不同的表中,对于Item表,我需要为每个不同的表创建记录<Item>,但还要插入订单节点的详细信息;像这样:
|ItemID|Store|Title |SKU|Quantity|Price|OrderID|AmountPaid|UserID|ShippingCost|
|3664 | 47|DDA010|mmx| 1| 6.2| 334| 17.10|marc58| 4.50|
|3665 | 45|DFZ42 |mmy| 2| 3.2| 334| 17.10|marc58| 4.50|
Run Code Online (Sandbox Code Playgroud)
为了在不同的表中“自动”写入所需的信息,我在社区的大力帮助下构建了这个查询: …
我的老板要我解析存储在表中的一组查询计划,并确定每个计划中存在多少具有无序预取的嵌套循环运算符。我只有大约 100 个查询计划,所以性能不是很重要。我尝试自己做,但很快就糊涂了,无法取得进展。
表的结构:
DROP TABLE IF EXISTS dbo.query_plans;
CREATE TABLE dbo.query_plans (
plan_name VARCHAR(100),
query_xml XML
);
Run Code Online (Sandbox Code Playgroud)
我上传了 T-SQL 以向pastebin上的表添加三个示例查询计划。这是我正在寻找的输出:
????????????????????????????????
? plan_name ? OPERATOR_COUNT ?
????????????????????????????????
? NO_PREFETCH ? 0 ?
? 1_PREFETCH ? 1 ?
? 2_PREFETCH ? 2 ?
????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我无法回答任何关于为什么我需要这样做的问题。谢谢!