标签: xml

在 xml 数据中搜索值

我有一个名称表:

表A

John
Jim
Jason
Run Code Online (Sandbox Code Playgroud)

和一个 xml 字符串表:

表B

示例 1

    <Show Title="" ShowTitle="=False" ShowLine="=False" ShowDescription="=False" ShowExpandCollapse="=False" IsVisible="=True" Description="" PageBreakAfter="=False" PageCaption="" AppLink="" InfoLink="" ImageLink="" Pause="=False" PauseMessage="" PauseMessageStyle="" PauseTitle="" ScreenStyle="">
  <ShowOption Sequence="1" Name="Jim" Caption="Test" SelectOptionsImageLinkFieldExpression="ImageLink" />
</Show>
Run Code Online (Sandbox Code Playgroud)

示例 2

<vars>
  <var name="MatrixName">
    <value>="LockExitPairCompatability"</value>
  </var>
  <var name="Jason">
    <value>=If(Exists(Minute.Value.Min), ToNumber(Minute.Value.Min), 0)</value>
  </var>
  <var name="MinNum">
    <value>=If(Exists(Agency) AND Agency = "Cert", 0, MinNum)</value>
  </var>
  <var name="Where">
    <value>="Site='" + Root.Site + "' AND HWType IN " + ToSQLArray(Root.Components[ActiveDoor].HardwareType)</value>
  </var>
  <var name="Where2">
    <value>=" AND HWSubType IN " …
Run Code Online (Sandbox Code Playgroud)

xml sql-server

4
推荐指数
2
解决办法
327
查看次数

带有不区分大小写标签的 XML 查询

我有一个要求,我希望 XML 标记在我的 xml 查询中不区分大小写。

例如:

DECLARE @myTable TABLE ( yourXML XML )  

INSERT INTO @myTable SELECT '<z><a><b>1</b><c>2</c></a></z>'
INSERT INTO @myTable SELECT '<Z><A><b>1</b><c>2</c></A></Z>'   

SELECT * FROM @myTable WHERE ( [yourXML].exist('for $x in /z/a where  ( ($x/b[1]) = 1 )  return $x')>0 ) 
Run Code Online (Sandbox Code Playgroud)

返回输出为

yourXML
<z><a><b>1</b><c>2</c></a></z>
Run Code Online (Sandbox Code Playgroud)

但我希望在不考虑 XML 标记大小写的情况下显示输出。所以我想要的输出应该是

yourXML
<z><a><b>1</b><c>2</c></a></z>
<Z><A><b>1</b><c>2</c></A></Z>
Run Code Online (Sandbox Code Playgroud)

怎么做?

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

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

在 Sql Server 索引(物化)视图中创建嵌套 XML

此页面https://msdn.microsoft.com/en-us/library/ms188276.aspx表示如果您想要嵌套的 XML(即 XML 树),那么您需要像这样设置查询:

SELECT Col1, 
       Col2, 
       ( SELECT Col3, Col4 
        FROM  T2
        WHERE T2.Col = T1.Col
        ...
        FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Run Code Online (Sandbox Code Playgroud)

(使用子查询)

这与索引视图的要求完全不一致(不允许子查询)。

有没有办法将这两个功能结合在一起?(有一个带有 XML 树的索引视图?)

我的问题的不足是: 如何在不使用任何子查询或联合的情况下从许多表创建 XML 树(即嵌套的 XML 节点)。(因此它将与 SQL Server 索引视图一起使用。)

仅供参考:不确定是否重要,但我的特定查询有超过 10 个级别的 xml 树(从一堆不同的表中提取)。

xml sql-server materialized-view sql-server-2012

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

SQL Server 的 OPENXML 问题

我是 OPENXML 的新手,并且有 90% 的我想做的工作......坚持这个:

<ReportHost name="411.114.42.42">
  <HostProperties>
    <tag name="HOST_END">Wed Nov 11 20:48:43 2015</tag>
    <tag name="LastAuthenticatedResults">8675309</tag>
    <tag name="Credentialed_Scan">true</tag>
    <tag name="policy-used">AWT v6</tag>
    <tag name="ssh-auth-meth">MyPassword</tag>
    <tag name="ssh-login-used">MyLogin</tag>
    <tag name="local-checks-proto">ssh</tag>
    <tag name="host-ip">411.114.42.42</tag>
    <tag name="HOST_START">Wed Nov 11 20:00:01 2015</tag>
  </HostProperties>
</ReportHost>
Run Code Online (Sandbox Code Playgroud)

我想要的结果:

Wed Nov 11 20:48:43 2015
8675309
TRUE
AWT v6
MyPassword
MyLogin
ssh
411.114.42.42
Wed Nov 11 20:00:01 2015
Run Code Online (Sandbox Code Playgroud)

我可以获取名称值(“Host_end”等),但不能获取内容。

我的查询:

Select   * 
from OPENXML (@hdoc,'/ReportHost/HostProperties/tag',1)
WITH (
    name varchar (500)
     )
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想坚持使用 OPENXML,因为我只是花了一天的时间学习它并进入最后一步。

如果我提供了足够的信息,请告诉我。

xml sql-server

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

没有命名空间的查询 XML

我可以查询 XML,它定义了带有公共表表达式的xmlns标记

DECLARE @XML XML

SET @XML = 
'<NodeA xmlns="https://XYZ.xsd">
<NodeB verzePis="">
    <NodeC1 attrA="Hello" />
    <NodeC2 attrA="World" />
  </NodeB>
</NodeA>
'

;WITH XMLNAMESPACES(DEFAULT 'https://XYZ.xsd')

    SELECT
        r.value('fn:local-name(.)', 'nvarchar(50)') as SectionName,
        r.value('@attrA','NVARCHAR(250)') attrA
    FROM    @XML.nodes('/NodeA/NodeB/*') AS t(r);
Run Code Online (Sandbox Code Playgroud)

但是如果源 XML 不包含任何 xmlns 标记呢?如何解决缺少命名空间的问题?

xml sql-server sql-server-2008-r2

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

生成 XML 的语法不正确

我试图在 SQL Server 2000 SP4 中运行以下代码,但出现错误。

Declare @Body varchar(8000);
Declare @TableHead varchar(8000);
Declare @TableTail varchar(8000);

Set NoCount On;
Set @TableTail = '</table></body></html>';
Set @TableHead = '<html><head>' + 
            '<style>
    td {border: solid black 1px;padding-left:5px;padding-right:5px;padding-top:1px;padding-bottom:1px;font-size:11pt;}
    tr.even {background-color:white;}
    tr.odd {background-color:#eeeeee;}
            </style>' + 
            '</head>' + 
            '<body><table cellpadding=0 cellspacing=0 border=0>' + 
            '<tr bgcolor=#FFEFD8><td align=center><b>Server Name</b></td>' + 
            '<td align=center><b>Product</b></td>' + 
            '<td align=center><b>Provider</b></td>' + 
            '<td align=center><b>Data Source</b></td>' + 
            '<td align=center><b>Is Linked?</b></td></tr>';

Select @Body = (Select 
        name As [TD],
        product As [TD],
        provider As [TD],
        data_source As [TD …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2000 t-sql

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

为什么在 SQL Server 2012 数据库中存储 XML 架构?

在 SQL Server 数据库中存储和/或使用 XML 架构的真实生产环境示例是什么?

我正在按照 Microsoft 70-461 考试目标努力工作。我已经完成了 Microsoft 在https://technet.microsoft.com/en-us/library/ms176009(v=sql.110).aspx 上的数据库中创建和存储 XML 模式的 演练

我还没有在应用程序将访问存储在数据库中的 XML 模式的数据库环境中工作。在生产 SQL Server 数据库中创建和存储 XML 架构的真实用例是什么?

xml sql-server-2012

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

使用 Sql Server 读取 Xml 的内部节点值

我想在sql中读取xml的节点值,我的xml看起来像这样

在此处输入图片说明

我只想读取“订单 1”的订单节点的值,我的代码是

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * FROM OPENXML (@idoc, '/ROOT/Customer/Order',0)
WITH (
    [Order]  varchar(100)
    );
Run Code Online (Sandbox Code Playgroud)

xml sql-server

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

TSQL (2014) - 导入带有重音符号和标点符号的 XML

使用 Forrest 的这个解决方案:

DECLARE @XML xml = 
'<?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  garçonneé III° arrondissement</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>'

SELECT 
    x.value('./ItemID[1]','int') AS ItemID,
    x.value('./Store[1]','int') AS Store,
    x.value('./Title[1]','nvarchar(100)') AS Title,
    x.value('./SKU[1]','nvarchar(100)') AS SKU,
    x.value('../Quantity[1]','int') AS Qty,
    x.value('../Price[1]','decimal(11,2)') AS Price,
    x.query('//OrderID[1]').value('.','int') AS OrderID, …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2014

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

为什么 XML 比 VARCHAR(MAX) 占用更多的存储空间?

我们有将 XML 数据存储为 varchar(MAX) 的大表。数据仅供参考/历史用途,不作查询。根据我所读到的内容,存储为 XML 数据类型而不是 VARCHAR(MAX) 应该可以节省空间,但我的测试显示并非如此。见下文,其中 t1_XML 的大小小于 t1_NVARCHARMAX,但大于 t1_VARCHARMAX。

set nocount on;

drop table t1_XML;
drop table t1_VARCHARMAX;
drop table t1_NVARCHARMAX;

create table t1_XML(col1 int identity primary key, col2 XML);
create table t1_VARCHARMAX(col1 int identity primary key, col2 varchar(max));
create table t1_NVARCHARMAX(col1 int identity primary key, col2 nvarchar(max));

go

declare @xml XML = '<root><element1>test</element1><element2>test</element2><element3>test</element3><element4>test</element4><element5>test</element5></root>'
    , @x int = 1;

while @x <= 10000
begin
    begin tran

    insert into dbo.t1_XML (col2) values (@xml);
    insert into dbo.t1_VARCHARMAX (col2) …
Run Code Online (Sandbox Code Playgroud)

xml sql-server datatypes sql-server-2012

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