标签: xml

如何使用 FOR XML 从子元素中删除 xmlns

我有一个用于生成 SOAP 文档的 TSQL 查询。我正在使用两个命名空间。即: - http://schemas.xmlsoap.org/soap/envelope/用于“打包”soap 文档 - 描述正文中包含的数据的自定义文档

目前,包括正文中的元素在内的每个元素都包含我不需要且想要的soapnamespace 引用,我只希望它位于根元素中。

所以我的 XML 现在看起来像

<soapenv:Envelope xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
    <soapenv:Header xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar" />
            <soapenv:Body xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
                    <pas:SomeObject xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像

<soapenv:Envelope xmlns="soapenv" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pas="foobar">
    <soapenv:Header/>
            <soapenv:Body>
                    <pas:SomeObject>
Run Code Online (Sandbox Code Playgroud)

在我当前使用的查询中

;WITH XMLNAMESPACES ( 'http://foobar' as pas,
      'http://schemas.xmlsoap.org/soap/envelope/' as soapenv
      )
SELECT (SELECT '' FOR XML PATH('soapenv:Header'),type ),
etc...
FOR XML PATH('soapenv:Envelope'), ELEMENTS
Run Code Online (Sandbox Code Playgroud)

xml t-sql

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

查询 sys.dm_exec_query_plan 时出现消息 6355“无法将一个或多个字符从 XML 转换为目标排序规则”

我喜欢在旅途中查找丢失的索引,查看执行计划

如果我想改进当前正在运行的东西,它可能会给我一个进一步的指示。

为此,我使用以下查询:

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT 
    er.session_id,
    er.blocking_session_id,
    er.start_time,
    er.status,
    dbName = DB_NAME(er.database_id),
    er.wait_type,
    er.wait_time,
    er.last_wait_type,
    er.granted_query_memory,
    er.reads,
    er.logical_reads,
    er.writes,
    er.row_count,
    er.total_elapsed_time,
    er.cpu_time,
    er.open_transaction_count,
    er.open_transaction_count,
    s.text,
    qp.query_plan,
    logDate = CONVERT(DATETIME,GETDATE()),
    logTime = CONVERT(DATETIME,GETDATE())
FROM sys.dm_exec_requests er 
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) s
CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp
WHERE 
    CONVERT(VARCHAR(MAX), qp.query_plan) LIKE '%<missing%'
Run Code Online (Sandbox Code Playgroud)

它通常工作正常;但是,我最近遇到了整理和 XML 的问题:

在此处输入图片说明

错误信息说:

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT 
    er.session_id,
    er.blocking_session_id,
    er.start_time,
    er.status,
    dbName = DB_NAME(er.database_id),
    er.wait_type, …
Run Code Online (Sandbox Code Playgroud)

xml sql-server collation execution-plan encoding

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

在客户端应用程序上使用 CoreData

这可能更像是一个 SO 问题,但是......

如果我正在为 OS X 编写一个将与在线 MySQL 数据库同步的客户端应用程序,那么我的 CD 是使用 SQLite 还是 XML 有什么区别?

mysql sqlite xml mac-os-x

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

SQL Xml 在空记录集上返回空根标记

我正在使用 Sql Server 2005 Express 版本在 xml 输出中显式地生成用户定义的节点。下面的代码工作正常,只是当用户表中不存在记录集时,我无法生成一个空节点。

代码:

select 1 as tag, null as parent,

FirstName as [User!1!FirstName!Element],

LastName as [User!1!LastName!Element]

FROM Users

FOR XML EXPLICIT
Run Code Online (Sandbox Code Playgroud)

输出:

<Users>
<FirstName>Ammy</FirstName>
<LastName>Dammy</LastName>
</Users>
<Users>
<FirstName>Lammy</FirstName>
<LastName>Lolly</LastName>
</Users>
Run Code Online (Sandbox Code Playgroud)

空表的预期输出:

<Users></Users>
Run Code Online (Sandbox Code Playgroud)

注意:我不喜欢这种xsnil方法,欢迎所有其他解决问题的方法

schema sql-server-2005 xml select

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

是否可以让 SQL Server 2008 从 URL 下载文件

我的网络上运行着一组基于 XML 的服务。

这些服务中的数据需要镜像到 SQL Server 2008 实例上的表中。

将 XML 放入表中没有问题我已经可以做到了,但我现在要做的是将一大串 XML 传递给存储过程,然后使用 OPENXML 命令将其插入表中.

我想知道的是,不是使用 3rd 方程序从服务中获取这些数据,然后调用存储的过程并插入它,我是否有可能让 SQL Server 直接从中获取 XML服务 URL 并像这样处理它。

无论我尝试多少次,我似乎都能找到大量关于从服务器文件系统读取文件/从服务器文件系统写入文件的文章和帖子,以及实际插入 XML 数据的几百万条左右的文章,但我似乎无法找到查找有关让服务器直接从 URL 获取数据的任何内容。

干杯

-----====== 更新 25/8/2012 ======--

经过更多的研究,我找到了第三种方法来做到这一点:

declare @xmlObject as int
declare @responseText as varchar(max)
declare @url as varchar(2048)

select @url = 'http://server/feed/data'

exec sp_OACreate 'MSXML2.XMLHTTP', @xmlObject OUT;
exec sp_OAMethod @xmlObject, 'open', NULL, 'get', @url, 'false'
exec sp_OAMethod @xmlObject, 'send'
exec sp_OAMethod @xmlObject, 'responsetext', @responseText OUTPUT
exec sp_OADestroy @xmlObject

select @responseText

exec …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 xml

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

如何根据元素值返回 XML 节点序号,或删除节点?

我有一个与此类似的 XML 文档:

<Root>
  <Sub>
    <Record>
      <Guid>aslkjflaksjflkasjfkljsd</Guid>
    </Record>
    <Record>
       <Guid>opqiwuerl;kasdlfkjawop</Guid>
    </Record>
  </Sub>
</Root>
Run Code Online (Sandbox Code Playgroud)

我正在<Record>根据某些标准替换整个节点。该<Record>节点包含一个<Guid>,我可以用它来识别它们(那些假装是有效的GUID请!)。

知道了 GUID,我将该节点的 XML 返回到一个变量中以供进一步处理。在下游,我需要能够删除该特定节点,以便我可以insert将节点的修改版本恢复到原始文档中。

有没有办法确定序数,或者使用delete/replace方法根据元素的值删除节点的另一种方法?

xml sql-server-2008-r2 xquery

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

用于选择性 Xml 索引的 Sql Server 2012 扩展事件未显示结果

我创建了一个扩展事件来监视和调整 Selective Xml 索引

CREATE EVENT SESSION [SelectiveXmlIndexing] ON SERVER 
ADD EVENT sqlserver.selective_xml_index_no_compatible_sql_type,
ADD EVENT sqlserver.selective_xml_index_no_compatible_xsd_types,
ADD EVENT sqlserver.selective_xml_index_path_not_indexed,
ADD EVENT sqlserver.selective_xml_index_path_not_supported
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
Run Code Online (Sandbox Code Playgroud)

在 SSMS 中,当我view live data然后执行xml查询和视图时,没有返回任何结果。

我所看到的是:

在此处输入图片说明

在看到结果之前,我还需要完成其他步骤吗?

我跟着:

http://www.mssqltips.com/sqlservertip/2731/managing-sql-server-extended-events-in-management-studio/

http://www.sqlskills.com/blogs/bobb/choosing-paths-for-selective-xml-index-part-2-using-the-sxi-xevents/

http://www.sqlskills.com/blogs/jonathan/sql-server-2012-extended-events-update-3-viewing-target-data/

编辑,

添加请求的查询和索引

询问

WITH XMLNAMESPACES ( 'http://tempuri.org/tst.xsd' as tst )

SELECT 

    x.XmlId

    ,a.value('@id', 'int') As ColumnA
    ,b.value('.', 'NVARCHAR(25)') ColumnB               

        From
    dbo.XmlTable As X

    Cross Apply x.XmlContent.nodes('tst:Root/tst:Stuff') aa(a)
    Cross Apply a.nodes('tst:Forms') bb(b) 
Run Code Online (Sandbox Code Playgroud)

以及根元素和属性的索引

CREATE SELECTIVE XML INDEX [xsi_XmlTable] …
Run Code Online (Sandbox Code Playgroud)

xml sql-server extended-events sql-server-2012

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

接受xml文件作为输入的存储过程

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
</catalog>
Run Code Online (Sandbox Code Playgroud)

我有上面的xml文件。

在我的SQL Server 2008数据库有表Book__Master中的所有列都相同上述xml文件的元素,即有像列bookidauthortitle等。

现在我想编写一个存储过程,它接受这个 xml 文件作为输入参数,并将元素的值按原样存储在它们各自的列中。

任何人都可以帮助我如何编写这种类型的存储过程?

xml stored-procedures sql-server-2008-r2

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

对于 xml 缺少空列

当我们使用 for xml 子句从一行创建 xml 时,如下所示

select * from Menus where MenuID=100 for xml path('')
Run Code Online (Sandbox Code Playgroud)

xml 将错过具有 NULL 作为值的列。

我有一个像

select * from Menus where MenuID=100  for xml path('') , ELEMENTS XSINIL
Run Code Online (Sandbox Code Playgroud)

但是 xml 只会创建如下

<MenuID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">100</MenuID>
<MenuOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1</MenuOrder>
Run Code Online (Sandbox Code Playgroud)

有没有办法用NULL列创建如下

<MenuID>100</MenuID>
<MenuOrder>1</MenuOrder>
Run Code Online (Sandbox Code Playgroud)

xml sql-server

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

帮助将 SQL 查询转换为 XML 输出

我有以下查询:

SELECT    
    [ID] AS [NewID]
    , (
       CASE WHEN LEN([MiddleName]) > 0 THEN
          [LastName] + ', ' + [FirstName] + ' ' + LEFT([MiddleName],1) + '.'
       ELSE
          [LastName] + ', ' + [FirstName]
       END
    ) AS [Name]
    , [Title] AS [ProfTitle]
    , CONVERT(CHAR(10),[DepartureDate],111) AS [BorDepart]
    , [LocationOfficeNumber] AS [OfficePhone]
    , [Location]
    , [LocationSection] AS [Sec]
    , [PracticeGroup] AS [PracticeTL]
    , [Email]         
FROM [dbo].[Borrowers]
Run Code Online (Sandbox Code Playgroud)

有了这个,我想知道如何编写一个转换为这个输出的 FOR XML 查询:

<sydney>
    <import>
        <template id="Borrower" name="Borrowers">
            <record searchfield="NewID" searchvalue="NewID">
                <field id="NewID">
                    <![CDATA[NEWID]]>
                </field>                
                <field …
Run Code Online (Sandbox Code Playgroud)

xml sql-server t-sql

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