标签: xml

在 SQL Server 2008 中读取 XML 文件

如何读取 XML 文件并将 XML 中的数据存储到 SQL Server 2008 中的表中?

sql-server-2008 xml sql-server

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

为什么 where 子句过滤 `value()` 时不使用二级选择性索引?

设置:

create table dbo.T
(
  ID int identity primary key,
  XMLDoc xml not null
);

insert into dbo.T(XMLDoc)
select (
       select N.Number
       for xml path(''), type
       )
from (
     select top(10000) row_number() over(order by (select null)) as Number
     from sys.columns as c1, sys.columns as c2
     ) as N;
Run Code Online (Sandbox Code Playgroud)

每行的示例 XML:

<Number>314</Number>
Run Code Online (Sandbox Code Playgroud)

查询的任务是计算T指定值为 的行数<Number>

有两种明显的方法可以做到这一点:

select count(*)
from dbo.T as T
where T.XMLDoc.value('/Number[1]', 'int') = 314;

select count(*)
from dbo.T as T
where T.XMLDoc.exist('/Number[. eq 314]') = …
Run Code Online (Sandbox Code Playgroud)

performance xml sql-server execution-plan sql-server-2012 query-performance

13
推荐指数
1
解决办法
674
查看次数

何时使用 XML 数据类型

我负责在一个项目上创建一个数据库。我们有很少有值的字段(每 10,000 条记录中有 1 个),我正在尝试找出将其存储在数据库中的最佳方法。

据我所知,我有 3 个选择:

  1. 在表中为每个额外值添加一列
  2. 添加一个链接表,该表引用原始表并且仅在我们需要存储值的地方有记录
  3. 使用原始表中的 XML 数据类型并将所有值存储在此。

还有其他我没有考虑过的选择吗?

我正在尝试找出每种方法的优缺点。据我所知,1 将是最简单的,而 2 将占用最少的空间,但我正在努力为 3 找到许多资源。

sql-server-2008 xml

12
推荐指数
2
解决办法
3353
查看次数

将 XML 从文件读入 PostgreSQL 数据库的 SQL

如何编写 SQL 将 XML 文件读入 PostgreSQLXML值?

PostgreSQL 有一个原生XML 数据类型,具有将XMLPARSE文本字符串解析为该类型的函数。它还具有从文件系统读取数据的方法;在COPY声明中,等等。

但我没有看到编写原生 PostgreSQL SQL 语句来读取文件系统条目中的内容并使用它来填充XML值的方法。我怎样才能做到这一点?

postgresql xml

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

如何在没有表的数据库中存储数据?

我在学校学到的只是将数据保存到表中的 SQL。现在我正在研究一个数据存储在 XML 文件中的项目。此外,每个 XML 都包含对可视文件 (JPEG) 的引用。

XML 本身包含一千多个坐标点,以及有关数据的附加信息。

在我看来,将这些信息存储在表格中是没有意义的。此外,我也无法使用 SQL 存储 JPEG 文件。

什么是合适的解决方案,或者我这边的推理是否有错误?

如您所见,我对数据库很陌生。因此,欢迎任何建设性的建议、链接和建议。

xml database-design

12
推荐指数
2
解决办法
2802
查看次数

使用xml参数插入多个数据时如何避免使用Merge查询?

我正在尝试使用一组值更新表。数组中的每一项都包含与 SQL Server 数据库表中的行匹配的信息。如果该行已存在于表中,我们将使用给定数组中的信息更新该行。否则,我们在表中插入一个新行。我已经基本上描述了 upsert。

现在,我试图在采用 XML 参数的存储过程中实现这一点。我使用 XML 而不是表值参数的原因是,执行后者时,我必须在 SQL 中创建自定义类型并将此类型与存储过程相关联。如果我以后更改了存储过程或数据库架构中的某些内容,则必须重做存储过程和自定义类型。我想避免这种情况。此外,TVP 相对于 XML 的优势对我的情况没有用,因为我的数据数组大小永远不会超过 1000。这意味着我不能使用这里提出的解决方案:How to insert multiple records using XML in SQL server 2008

此外,这里的类似讨论(UPSERT - 是否有更好的替代 MERGE 或 @@rowcount?)与我所问的不同,因为我试图将行插入到表中。

我希望我可以简单地使用以下一组查询来更新 xml 中的值。但这行不通。当输入是单行时,这种方法应该有效。

begin tran
   update table with (serializable) set select * from xml_param
   where key = @key

   if @@rowcount = 0
   begin
      insert table (key, ...) values (@key,..)
   end
commit tran
Run Code Online (Sandbox Code Playgroud)

下一个替代方法是使用详尽的 IF EXISTS 或其以下形式的变体之一。但是,我以次优效率为由拒绝了这一点:

IF (SELECT COUNT ... ) > 0 …
Run Code Online (Sandbox Code Playgroud)

xml sql-server stored-procedures t-sql upsert

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

用 XQuery 替换 SQL Server 中强类型 xml 元素的值

给定一个在 XML 模式集合中定义的元素,如下所示:

<xsd:element name="xid">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="32" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)

您将如何使用 XQuery 更新元素?

该元素位于架构集合的ns命名空间中。我一直在尝试更新以下查询的元素:

update cm.item
   set data.modify(
    'declare namespace ns="http://www.anon.com"; 
     replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') 
 where id = 11793
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误:

消息 9301,级别 16,状态 1,第 2 行 XQuery [cm.item.data.modify()]:在此版本的服务器中,“cast as”不可用。请使用“演员为?” 句法。

如果我完全删除演员表并使用此查询:

update cm.item
   set data.modify(
    'declare namespace ns="http://www.anon.com"; 
     replace value of (/ns:*/ns:xid)[1] with "X00011793"') 
 where id = 11793
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

消息 2247,级别 16,状态 1,第 2 行 XQuery [cm.item.data.modify()]:该值的类型为“xs:string”,它不是预期类型“<anonymous>”的子类型。

如果我发出这个查询: …

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

11
推荐指数
1
解决办法
1934
查看次数

修改 XML:将属性转换为元素

我有一XML列包含具有类似结构的数据:

<Root>
    <Elements>
        <Element Code="1" Value="aaa"></Element>
        <Element Code="2" Value="bbb"></Element>
        <Element Code="3" Value="ccc"></Element>
    </Elements>
</Root>
Run Code Online (Sandbox Code Playgroud)

如何使用 SQL Server 修改数据以将每个Value属性更改为元素?

<Root>
    <Elements>
        <Element Code="1">
            <Value>aaa</Value>
        </Element>
        <Element Code="2">
            <Value>bbb</Value>
        </Element>
        <Element Code="3">
            <Value>ccc</Value>
        </Element>
    </Elements>
</Root>
Run Code Online (Sandbox Code Playgroud)

更新:

我的 XML 看起来更像这样:

<Root attr1="val1" attr2="val2">
    <Elements>
        <Element Code="1" Value="aaa" ExtraData="extra" />
        <Element Code="2" Value="bbb" ExtraData="extra" />
        <Element Code="3" Value="ccc" ExtraData="extra" />
        <Element Code="4" Value="" ExtraData="extra" />
        <Element Code="5" ExtraData="extra" />
    </Elements>
    <ExtraData>
       <!-- Some XML is here -->
    </ExtraData>
</Root> …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery

11
推荐指数
2
解决办法
3290
查看次数

动态SQL(pivot查询)转换为xml输出时,为什么日期的第一位转换为unicode?

我正在使用Bluefeet 的这个很好的例子https://dba.stackexchange.com/a/25818/113298,来创建一个数据透视表并将其转换为 xml 数据。

声明参数

DECLARE @cols AS NVARCHAR(MAX),  @query  AS NVARCHAR(MAX);
Run Code Online (Sandbox Code Playgroud)

接下来有一个代码很多的CTE,CTE的最终结果放在一个临时数据库中(与示例中相同)

SELECT 
B.[StayDate] -- this is a date dd-mm-yyyy
, B.[Guid]
INTO #tempDates
FROM BaseSelection B
Run Code Online (Sandbox Code Playgroud)

生成 cols(与示例相同)

SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120)) 
FROM #tempDates
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') 
,1,1,'');
Run Code Online (Sandbox Code Playgroud)

结果集是我应该期望的

set @query = 
   'SELECT [Guid],' + @cols +'
    FROM
    (
        SELECT 
            [StayDate] 
           ,[Guid]
        FROM #tempDates
    ) A
    pivot
    (
        count([StayDate])
        for [StayDate] in (' + @cols +')                    
    ) …
Run Code Online (Sandbox Code Playgroud)

xml sql-server pivot

11
推荐指数
2
解决办法
2983
查看次数

如何将 HTML 代码读取为 XML 并像 sql 中的示例一样获得输出?

我在数据库中存储了 HTML 代码,我想将其作为 XML 读取。

我的代码:

http://rextester.com/RMEHO89992

这是我拥有的 HTML 代码示例:

<div>
  <section>
       <h4>
         <span> A </span>
        </h4>
        <ul>
           <li>
              <span> Ab</span>
                     AD
              <span> AC </span>
           </li>
           <li>
              <span> Ag</span>
              <span> AL </span>
           </li>
        </ul>
        <h4>
              <span> B </span>
       </h4>
       <ul>
           <li>
              <span> Bb</span>
                     BD
              <span> BC </span>
           </li>
           <li>
              <span> Bg</span>
              <span> BL </span>
           </li>
        </ul>
   </section>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我需要的输出示例:

Category         Selection        Value                    
---------        ---------        ------------             
A                Ab               AD                  
A                Ag               AL                       
B                Bb               BD                   
B                Bg               BL                       
Run Code Online (Sandbox Code Playgroud)

我需要将<h4>标签内的值作为 …

xml sql-server t-sql

11
推荐指数
2
解决办法
3855
查看次数