标签: xml

使用 Oracle XML 模式生成 XML

我有一些使用 DBMS_XMLSCHEMA 注册的 XML 模式定义。我使用生成的 XMLTypes 创建了表。我可以使用 XMLQuery 创建 XML,如果我理解正确,如果定义正确,查询结果可以插入到表中。

最终需要将 XML 写入文件,但我不确定的部分是从头开始编写 XMLQueries 是否是生成 XML 的最佳方式。有什么方法可以让 XML 模式为指南生成 XML 存根或生成模板 XMLQuery?数据目前都在常规 Oracle 表中,但排列方式完全不同,因此任何有关基于特定注册模式集轻松导出到 XML 的信息都会很有用。

oracle xml oracle-11g-r2

8
推荐指数
1
解决办法
3303
查看次数

如何粉碎 .docx XML?

我正在尝试将 xml(实际上是 docx 文件)导入到 sql server 2008 数据库。我几乎是 XML 编程的新手。我用谷歌搜索了很多,但几乎所有的例子都有简单的 xml 文件。这里的 xml 文件有点复杂(请参见下文)。你能给我一些想法我应该如何为这个 XML 创建表以及我应该在 sql server 中运行什么查询。我需要所有标签的值,例如 w:rsidP,w:rsidRDefault,w:rsidR of w:p,w:pStyle,w:bookmarkStart,w:t 标签等。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
<w:body>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0">
<w:pPr><w:pStyle w:val="Heading1"/>
</w:pPr><w:bookmarkStart w:id="0" w:name="_Toc212523610"/>
<w:r>
<w:t>Summary</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
</w:p>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/><w:ind w:right="-694"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>What is the Group Defined Practice for Integrity Management?</w:t></w:r></w:p>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/></w:pPr><w:r><w:t xml:space="preserve">This Practice is derived from the GP Group …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 xml sql-server

8
推荐指数
1
解决办法
987
查看次数

XML 列的 IN 和 NOT IN

我有一个带有 xml 列的表。XML类似于

<Root>
  <Row>
    <user>abc</user>
    <Rowid>1</Rowid>
  </Row>
  <Row>
    <user>vf</user>
    <Rowid>2</Rowid>
  </Row>
  <Row>
    <user>ert</user>
    <Rowid>3</Rowid>
  </Row>
  <Maxrowid>3</Maxrowid>
</Root>
Run Code Online (Sandbox Code Playgroud)

现在下面的查询返回 sl_no 列和包含 xml 列的行的 myxmlcolumn 在节点 'user'() 中具有值 'abc' 或 'xyz'。下面的查询我使用类似于 sql 的 IN 选项。

SELECT
    [mytable].[Sl_no],
    [mytable].[myxmlcolumn]
    FROM [mydb].dbo.[mytable]
    WHERE
        [myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0
Run Code Online (Sandbox Code Playgroud)

我想要类似的查询,它与 sql 'NOT IN' 做同样的工作。在我的情况下,我希望在 xml 列中的节点“user”() 中没有值“abc”或“xyz”的行。所以请帮我解决这个问题。

xml sql-server sql-server-2008-r2 xquery

8
推荐指数
1
解决办法
326
查看次数

XML 解析缓慢

我目前正在尝试调整一个有点问题的存储过程,我注意到与运行它相关的大部分成本来自将一些 XML 解析为临时表。这是有问题的SQL:

CREATE TABLE #ChangeSet 
(
    RemarkTypeID TINYINT NOT NULL PRIMARY KEY,
    RemarkText VARCHAR(2500) NOT NULL,
    ListingID INT NOT NULL
)
INSERT INTO #ChangeSet
    (RemarkTypeID, 
    RemarkText,
    ListingID)
SELECT
    T.c.value('@RemarkTypeID[1]','tinyint') AS RemarkTypeID,
    T.c.value('@RemarkText[1]','varchar(2500)') AS RemarkText,
    @ListingID
FROM @RemarksXml.nodes('/Remarks[1]/Remark') AS T(c)
Run Code Online (Sandbox Code Playgroud)

此外,您对正在解析的 XML 的结构有了一些了解:

  <Remarks>
    <Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211767" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="8" RemarkText="aaaWasher,Dryer,Refriger,Microwav" />
    <Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211768" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="3" RemarkText="aaaell Maintained 3Bd 1.5Ba Semi-Detached Home In Cambridge Gardens. Garage W As Converted Into A Nice Family Room The Outside Is Maintence …
Run Code Online (Sandbox Code Playgroud)

xml sql-server temporary-tables

8
推荐指数
2
解决办法
3706
查看次数

如何在sql server中测试XML = ''?

我正在使用 sql server 2005,我遇到了可以在参数中传递许多值的情况。

基于此:为一个 SQL 参数传递多个值此过程使用 XML 作为参数。

这是存储过程的代码:

CREATE PROCEDURE [DENORMV2].[udpProductBulletPointSelectByTier1NoteTypeCode] (  
    @Tier1 VARCHAR(10),  
    @LanguageID INT,  
    @SeasonItemID VARCHAR(5) = NULL,
    @ListNoteTypeCode XML,  
    @CacheDuration INT OUTPUT )  
    WITH EXECUTE AS 'webUserWithRW'  
AS

        SELECT  pbp.Tier1, pbp.LanguageId, pbp.NoteText, pbp.NoteTypeCode,  
                pbp.NoteGroup, pbp.SortOrder  
        FROM    dbo.ProductBulletPoint pbp  

        WHERE   Tier1 = @Tier1 
          AND   LanguageId = @LanguageID 
          AND   (      SeasonItemId = @SeasonItemID  
                  OR
                       @SeasonItemID is null
                )

          AND pbp.NoteTypeCode IN (

                 SELECT  NoteTypeCode=BulletPoint.NoteTypeCode.value('./text()[1]', 'varchar(50)')
                   FROM  @ListNoteTypeCode.nodes('/BulletPoint/NoteTypeCode') AS BulletPoint ( NoteTypeCode )

          )

SELECT  @CacheDuration …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2005 xml sql-server optimization query-performance

8
推荐指数
2
解决办法
2万
查看次数

查看 XML 元素是否存在于具有特定值的文档中的任何级别

是否可以查询 XML 以查找特定元素是否具有特定值?例如,如果我想查看下面的 XML 在<ContactFName>.

但请注意,元素的位置可能会改变。在某些情况下,它可能在/root/MCTLocations/MCTLocation,或者可能跳到根下,或者出现在其他地方......

并且,是否可以参数化元素名称?

DECLARE @table TABLE (XmlCol XML)

INSERT INTO @table (XmlCol) VALUES ('
<root>
<MCTClientName>John</MCTClientName>
<MCTClientCity>Palm Beach</MCTClientCity>
<MCTLocations>
    <MCTLocation>
        <Address>1234 Main Street</Address>
        <ContactFName>Chris</ContactFName>
        <ContactLName>Brandt</ContactLName>
    </MCTLocation>
</MCTLocations>
</root>')

SELECT * FROM @table WHERE ??
Run Code Online (Sandbox Code Playgroud)

xml sql-server t-sql

8
推荐指数
1
解决办法
2万
查看次数

确定文件夹中多个 .DTSX 包文件的 PackageFormatVersion

Kenneth Fisher 发表了一篇关于如何确定我的 SSIS 包是什么 SQL 版本的博客文章2015 年 4 月。

它有一个表,其中列出了哪些 SQL 版本映射到PackageFormatVersion在 XML 元数据中找到的 SSIS 包。这在查看 1 个单独的包时很有用。

我有一个包含大约 100 个 SSIS.DTSX包的文件夹,我需要知道它们都是哪个 SQL 版本。

如何批量确定文件夹(文件系统)中PackageFormatVersion多个.DTSX包的(即 SQL 版本)是什么?

最终目标是确定哪个是正确的 TFS 版本来获取和实施以将这些包放入,因为当前不存在源代码控制系统。Kenneth 提供的表将帮助我回答这个问题,但首先我需要确认包 SQL 版本是什么。

假设我没有安装 BIDS 或 SSDT。

假设所需的输出是这样的,其中管道指定了一个新列:

PackageFilename | PackageFormatVersion
--------------------------------------
Package1.dtsx   | 3
Package2.dtsx   | 4
Run Code Online (Sandbox Code Playgroud)

欢迎使用 PowerShell、TSQL、可以抓取目录结构的 3rd 方工具或其他工具。

xml sql-server ssis powershell t-sql

8
推荐指数
1
解决办法
1274
查看次数

XML 查询问题

我正在尝试生成 SQL 查询以从以下 SQL XML 中获取“DATE”值:

截屏

我试过这样的事情,但我不认为我理解这些概念。

select 
   xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)') 
from 
    Job 
Run Code Online (Sandbox Code Playgroud)

这是作为文本的 XML:

select 
   xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)') 
from 
    Job 
Run Code Online (Sandbox Code Playgroud)

预期的输出将是日期:

<SearchJobConfig>
  <QueryID>1072</QueryID>
  <QueryString>
    <SearchCriteria name="Search query" >
      <ExpressionSet logicalOperator="AND">
        <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="GREATER_EQUAL" dataType="string" caseSensitive="false">2019-06-01T04:00:00</SimpleAttributeExpression>
        <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="LESS_EQUAL" dataType="string" caseSensitive="false">2019-06-13T03:59:59</SimpleAttributeExpression>
        <SimpleAttributeExpression displayName="Class" npmPropertyId="1056" searchOperation="EQUALS" dataType="int32" caseSensitive="false">65</SimpleAttributeExpression>
      </ExpressionSet>
    </SearchCriteria>
  </QueryString>
</SearchJobConfig>
Run Code Online (Sandbox Code Playgroud)

以及在同一行上获得结果需要什么..示例:

2019-06-01T04:00:00
2019-06-13T03:59:59
Run Code Online (Sandbox Code Playgroud)

我正在使用 SQL Server 2012 企业版。

xml sql-server query sql-server-2012

8
推荐指数
1
解决办法
194
查看次数

从 XML 返回可变数量的属性作为逗号分隔值

过度延伸

在阻塞进程报告和死锁 XML 的 SQL Server 扩展事件中,可以获取多个 SQL 句柄值以识别引发事件中涉及的查询。

由于可能涉及 1 个或多个 SQL 句柄,因此可靠地查询 XML 以检索所有这些句柄可能会很困难,并且还会使更简单的 XQuery 不正确,因为它仅检索第一个存储的值。

sqlhandle = bd.value('(process/executionStack/frame/@sqlhandle)[1]', 'varchar(130)'),
Run Code Online (Sandbox Code Playgroud)

用于说明的示例 XML 片段如下所示:

<executionStack>
      <frame line="1" stmtend="108" sqlhandle="0x020000008d18260040e407ba48fc247b0cb6121c21c2cf2b0000000000000000000000000000000000000000" />
      <frame line="1" stmtend="108" sqlhandle="0x02000000dd847b18dcaa4a09a89f56595186fcf91da8a7f70000000000000000000000000000000000000000" />
</executionStack>
Run Code Online (Sandbox Code Playgroud)

此 SQL Fiddle提供了更完整的示例。

我已经做到了这一点:

SELECT 
    sql_handle = 
        @x.query('for $s in //executionStack/frame return $s');  
Run Code Online (Sandbox Code Playgroud)

但这并没有得到我所追求的。扩展该查询以使用该@sqlhandle属性会引发错误:

SELECT 
    sql_handle = 
        @x.query('for $s in //executionStack/frame/@sqlhandle return $s');  
Run Code Online (Sandbox Code Playgroud)

消息 2396,级别 16,状态 1,第 60 行 XQuery [query()]:属性不得出现在元素外部

我怎样才能像这样查询 XML 以将所有列出的 SQL 句柄作为逗号分隔列表返回?

xml sql-server extended-events xquery

8
推荐指数
2
解决办法
696
查看次数

XQuery 不更新 XML 数据

我正在尝试运行脚本来更新 XML 列:

UPDATE DataImpTable
SET serviceData.modify('replace value of (/SMObjInfo/CentralData/SMData/CentralSDItem/ControlData/text())[1] with "9876"')
WHERE identifier=5
Run Code Online (Sandbox Code Playgroud)
UPDATE DataImpTable
SET serviceData.modify('replace value of (/SMObjInfo/CentralData/SMData/CentralSDItem/ControlData/text())[1] with "9876"')
WHERE identifier=5
Run Code Online (Sandbox Code Playgroud)

将 的值更改ControlData为 9876,但该值在 XML 中似乎没有更改/SMObjInfo/CentralData/SMData/CentralSDItem/ControlData

它与类型化和非类型化 XML 有什么关系?

xml sql-server update xquery

7
推荐指数
2
解决办法
193
查看次数