标签: xml

T-SQL:将 XML 转换为没有自闭合标签的字符串

我们有一个奇怪的系统,我们正在与之集成,它使用 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)

xml sql-server t-sql

5
推荐指数
1
解决办法
8970
查看次数

SQL Server / MySQL 到 DTD (+XML)

有什么方法可以至少将表模式从 MSSQL 或 MySQL 导出到 DTD 文件吗?表的数据到 XML 也是一样的。

我真的不知道如何编写 DTD,所以我非常需要一个生成器,看看我是如何设置数据库的,我会说这是最简单的方法吗?

mysql xml sql-server

5
推荐指数
1
解决办法
1620
查看次数

嵌套 XML 查询中所有项目的项目索引

我需要构建一个带有父记录和 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)

xml sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
671
查看次数

必须具备哪些条件才能根据模式验证 XMLTYPE?

我有一个生成 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. 和以前一样,这些都不能解决权限问题。我还尝试了使用从 …

oracle xml oracle-11g-r2 access-control

5
推荐指数
1
解决办法
1214
查看次数

如何将 XML 导入 SQL Server 表?

任何人都可以帮助我修复将 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)

xml sql-server

5
推荐指数
1
解决办法
3万
查看次数

将 XML 文件导入 SQL Server 2012

每个星期五我都必须将几个(有时超过 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)

xml sql-server import sql-server-2012

5
推荐指数
1
解决办法
3037
查看次数

在 SQL Server 2012 中的 TSQL 函数中使用 XSD 验证 XML?

我需要在 TSQL 中使用 XSD 验证 XML。为了使此任务半自动化,我需要在 TSQL 函数中执行此操作。

为了进行验证,我必须将值设置为 XML,如果它无效,我将收到一个错误。

我的问题是在 TSQL 函数内部我不能使用TRY / CATCH. 这是正确的方式吗,如果有可能做到这一点?

xml t-sql sql-server-2012 functions sql-clr

5
推荐指数
1
解决办法
917
查看次数

How to resolve this 'XML Validation: Declaration not found for element' error?

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 -

  1. Create a table with 2 columns - ID, XML info for some product (non-typed).
  2. Add a row entry, that is, XML data for a product.
  3. Create an XML Schema for the XML-product-data.
  4. Bind this schema to the one (column) in the table. …

xml sql-server sql-server-2012 xsd

5
推荐指数
1
解决办法
3200
查看次数

T-SQL 将 XML 动态导入表 (SQL Server 2014)

我有一个具有这种结构的 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)

为了在不同的表中“自动”写入所需的信息,我在社区的大力帮助下构建了这个查询: …

xml sql-server

5
推荐指数
2
解决办法
8391
查看次数

如何解析查询计划以获取具有无序预取的嵌套循环运算符的计数?

我的老板要我解析存储在表中的一组查询计划,并确定每个计划中存在多少具有无序预取的嵌套循环运算符。我只有大约 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)

我无法回答任何关于为什么我需要这样做的问题。谢谢!

xml sql-server execution-plan xquery

5
推荐指数
1
解决办法
493
查看次数