标签: sqlxml

将C#2.0 System.Data.SqlTypes.SqlXml对象转换为System.Xml.XmlNode

我似乎总是在C#中将数据转换为XML或从XML转换数据时遇到问题.它总是希望您创建一个完整的XMLDocument对象,即使您认为不应该这样做.在这种情况下,我在MS SQL 2005服务器中有一个SQLXML列,我试图将其拉出并推入需要XMLNode作为参数的函数.您会认为这很容易,但除了将其转换为字符串并创建新的XMLNode对象之外,我无法找到正确的方法.

我可以使用SqlDataReader,sqlComm.ExecuteReader()来加载读取器,使用sqlReader.GetSqlXml(0)来获取SQLXML对象,但是如何将其转换为XmlNode?

相反,我可以使用sqlComm.ExecuteXmlReader()来获取XmlReader,但是如何从阅读器中提取XmlNode?http://bytes.com/forum/thread177004.html表示无法使用XmlTextReader,我应该使用XmlNodeReader吗?

请帮忙!

c# sqlxml xmlnode sqldatareader

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

如何克服 OpenXML 的 8000 个字符限制?

我正在使用 OpenXML 在 SQL 中加载 XML,同时声明变量我可以达到的最大值是 8000 个字符:

DECLARE @xml_text varchar(8000)
Run Code Online (Sandbox Code Playgroud)

由于文本,ntext 不允许与 openXML 一起使用,我还有什么其他替代方法可以在 SQL 中加载整个 XML(超过 20000 个字符)?

sql sql-server sqlxml openxml

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

SQL XML Xquery数据查询在节点选择中使用变量?

我显然在我面前遗漏了一些东西,但是我有这样的SQL 2008 XML查询,如下所示:

select distinct cast(customFields_xml.query('data(/root/cf_item_type)') as varchar) as c1
from designs
Run Code Online (Sandbox Code Playgroud)

..我实际上想要实现的是使"cf_item_type"变量,因为我想将节点作为参数传递给proc ..

所以实际上,我试图结束这样的事情:

(@cf将作为参数传递,但声明例如使用)

declare @cf varchar
set @cf='cf_item_type'
select distinct cast(customFields_xml.query('data(/root/@cf)') as varchar) as cloth from designs
Run Code Online (Sandbox Code Playgroud)

..所以你可以看到我试图在xquery语句中使用@cf变量..

任何指针/帮助都会很棒!!

sql sqlxml sql-server-2008

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

带有 xmlagg 函数的 SQL 多个 SELECT 查询 - 数据未以所需的方式提取

我在 Oracle 中的数据是这样的

NAME | DEP_VALUE | ID_DEP

Amy     1         AA1234
Bob     2         BB4321
Clara   1         CC5678
Clara   2         CC7890
John    1         JJ6543
John    2         JJ7865
John    3         JJ7654
Tom     1         TT0987
Tom     2         TT6541
Tom     3         TT4087
Tom     4         TT3409
Run Code Online (Sandbox Code Playgroud)

我需要以这种方式提取数据

NAME  | DEP_VALUE |  ID_DEP

Amy     1         AA1234
Bob     2         BB4321
Clara   1;2       CC5678;CC7890
John    1;2;3     JJ6543;JJ7865;JJ7654
Tom     1;2;3;4   TT0987;TT6541;TT4087;TT3409
Run Code Online (Sandbox Code Playgroud)

我的查询如下

SELECT name,
   Rtrim(Xmlagg (Xmlelement (e, dep_value
                                || ';')).extract  ( '//text()' ), ','),
   Rtrim(Xmlagg (Xmlelement (e, id_dep
                                || …
Run Code Online (Sandbox Code Playgroud)

sql oracle select grouping sqlxml

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

修改(替换)条件的XML

我想替换元素标签中的值,具体取决于它的值以及另一个元素的值(与所述元素处于同一级别),这两个元素到处都在同一个父元素标签中(每个父标签都是唯一的)由于其自身的ID属性)。我想在存储过程中的此XML变量的各个位置进行更改。

作为第一次使用此计时器,我对如何修改整个xml中的元素感到困惑。这两个元素都存在于整个文档的同一父元素中,并且这些父标签中的每一个都有唯一的ID属性。

任何建议都会有很大帮助。有关如何混合和匹配“ value()”,“ modify()”等文档的链接也将有所帮助。

DECLARE @xml xml = '
<SemanticModel xmlns="schemas.microsoft.com/sqlserver/2004/10/semanticmodeling"; xmlns:xsi="w3.org/2001/XMLSchema-instance"; xmlns:xsd="w3.org/2001/XMLSchema"; ID="G1">
    <Entities>
        <Entity ID="E1">
            <Fields>
                <Attribute ID="A1">
                    <Name>AAAA</Name>
                    <DataType>Float</DataType>
                    <Format>n0</Format>
                    <Column Name="AAAA_ID" />
                </Attribute>
                <Attribute ID="A2">
                    <Name>BBBB</Name>
                    <DataType>Integer</DataType>
                    <Format>n0</Format>
                    <Column Name="BBBB_ID" />
                </Attribute>
                <Attribute ID="A3">
                    <Name>KKKK</Name>
                    <Variations>
                        <Attribute ID="A4">
                            <Name>CCCC</Name>
                            <DataType>Float</DataType>
                            <Format>n0</Format>
                        </Attribute>
                        <Attribute ID="A5">
                            <Name>AAAA</Name>
                            <DataType>Float</DataType>
                            <Format>n0</Format>
                        </Attribute>
                    </Variations>
                    <Name>AAAA</Name>
                    <DataType>Float</DataType>
                    <Format>n0</Format>
                </Attribute>
            </Fields>
        </Entity>
    </Entities>'
DECLARE @i int = 0
;WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/10/semanticmodeling' as dm, 'http://schemas.microsoft.com/analysisservices/2003/engine' as dsv, 'http://w3.org/2001/XMLSchema' as xs )
select @i …
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server xquery sqlxml

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

用于XML路径分组的TSQL

我在尝试分组/嵌套我的结果时遇到问题,如下所示.

任何帮助将不胜感激.

必需的XML输出

<WorkflowLog>
  <Process id="Type1">
    <ProcessInstance id="M11111">
      <AuditTrailEntry>
        <Data>
          <Attribute name="TypeSubCause">EMB</Attribute>
        </Data>
        <WorkflowModelElement>C_Created</WorkflowModelElement>
        <EventType>Start</EventType>
        <TimeStamp>2013-10-02T10:00:33</TimeStamp>
        <Originator>C_Team</Originator>
      </AuditTrailEntry>
      <AuditTrailEntry>
        <Data>
          <Attribute name="TypeSubCause">EMB</Attribute>
        </Data>
        <WorkflowModelElement>ITPSPotential</WorkflowModelElement>
        <EventType>Start</EventType>
        <TimeStamp>2013-10-03T09:15:32+10.00</TimeStamp>
        <Originator>R_Team</Originator>
      </AuditTrailEntry>
    </ProcessInstance>
  </Process>
</WorkflowLog>
Run Code Online (Sandbox Code Playgroud)

来自我的SQL实际XML输出 Process Id和ProcessInstance ID对同一个Id显示多次

<WorkflowLog>
  <Process id="Type1">
    <ProcessInstance id="M11111">
      <AuditTrailEntry>
        <Data>
          <Attribute name="TypeSubCause">EMBt</Attribute>
        </Data>
        <WorkflowModelElement>c_Created</WorkflowModelElement>
        <EventType>Start</EventType>
        <TimeStamp>2013-10-02T10:00:33+10.00</TimeStamp>
        <Originator>C_Team</Originator>
      </AuditTrailEntry>
    </ProcessInstance>
  </Process>
  <Process id="Type1">
    <ProcessInstance id="M11111">
      <AuditTrailEntry>
        <Data>
          <Attribute name="TypeSubCause">EMB</Attribute>
        </Data>
        <WorkflowModelElement>ITPSPotential</WorkflowModelElement>
        <EventType>Start</EventType>
        <TimeStamp>2013-10-03T09:15:32+10.00</TimeStamp>
        <Originator>R_Team</Originator>
      </AuditTrailEntry>
    </ProcessInstance>
  </Process>
</WorkflowLog>
Run Code Online (Sandbox Code Playgroud)

生成这个的SQL是

SELECT  '@id' = m1.TypeCause ,
        ( SELECT    '@id' …
Run Code Online (Sandbox Code Playgroud)

xml t-sql sql-server nested sqlxml

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

SQL Server中的一列中有多行

我想在一列中连接多个行.我在互联网上找到了很多例子,但对我不起作用.我究竟做错了什么?

        SELECT UserID,  
        STUFF((SELECT '; ' + Email.Email From Email where  UserEmail.EmailID = Email.ID for xml path('')),1,1, '') AS Emails
        From UserEmail
        where UserID = 1
Run Code Online (Sandbox Code Playgroud)

我仍然有这样的信息

UserID  Email
1       abc@yahoo.com
1       cde@gmail.com 
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

好的,我做了这个改变,但仍然有2行.如果我应用distinct,这将解决我的问题,但为什么我必须使用distinct.查询必须自行分组.

        SELECT UserID,  
        STUFF(( SELECT '; ' + ea.Email 
                From Email ea inner join UserMail ue_inner on ue_inner.EmailID = ea.ID 
                where 
                ue_inner.UserID = ue.UserID
                for xml path('')), 1, 1, '') 
                AS Email
        From UserEmail ue
        where UserID = 1
Run Code Online (Sandbox Code Playgroud)

结果

UserID   Email 
1        abc@yahoo.com; …
Run Code Online (Sandbox Code Playgroud)

xml sql-server concatenation path sqlxml

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

按 xml 查询的结果分组

我有一个带有 XML 列(称为元数据)的表,如下所示:

\n\n
<props>\n  <prop name="bytes" value="194" />\n  <prop name="error" value="File is a text file" />\n  <prop name="mime-type" value="text/plain " />\n</props>\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我有一些不同的错误,我可以在这里选择:

\n\n
SELECT MetaData.value(\'(/props/prop[@name="error"]/@value)[1]\', \'varchar(50)\') Error,\n       MetaData.value(\'(/props/prop[@name="mime-type"]/@value)[1]\', \'varchar(50)\') MimeType,\n       *\nFROM source\nWHERE MetaData.exist(\'/props/prop[@name="error"]\') = 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想计算错误发生的频率:

\n\n
SELECT MetaData.value(\'(/props/prop[@name="error"]/@value)[1]\', \'varchar(50)\') Error,\n       COUNT(*) Count\nFROM source\nWHERE MetaData.exist(\'/props/prop[@name="error"]\') = 1\nGROUP BY Error\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我收到错误消息:

\n\n
\n

Meldung 207、Ebene 16、状态 1、Zeile 5
\n Ung\xc3\xbcltiger Spaltenname \'错误\'。

\n
\n\n

这意味着类似:无效的列名\'错误\'

\n\n

我也在这里尝试过:

\n\n
Select Error, COUNT(Error) FROM (\n    SELECT MetaData.value(\'(/props/prop[@name="error"]/@value)[1]\', \'varchar(50)\') Error\n …
Run Code Online (Sandbox Code Playgroud)

xml sql t-sql group-by sqlxml

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

Xml选择查询xpath很慢

我的XML结构:

<Items>
  <Item>
    <guid>FC550573-7171-997F-752D-8D65590CBFD6</guid>
    <Objects>
       <Object>
         <type>0</type>
         <guid>E10D9DA9-2C8D-8024-2F07-DF21395811BF</guid>
       </Object>
       <Object>
         <type>0</type>
         <guid>D8338400-35C7-781E-A039-C0FDDF80714A</guid>
       </Object>
    </Objects>
  </Item>
</Items>
Run Code Online (Sandbox Code Playgroud)

填充对象表时:

CREATE TABLE [dbo].[Objects](
    [item_guid] [varchar](36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [type] [int] NOT NULL,
    [guid] [varchar](36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

使用查询:

INSERT INTO [dbname].[dbo].[Objects]
           ([item_guid]
           ,[type]
           ,[guid])
SELECT
 X.source.query('../../guid').value('.','VARCHAR(36)') as item_guid,
 X.source.query('type').value('.','INT') as type,
 X.source.query('guid').value('.','VARCHAR(36)') as guid
FROM(
Select xmldata from XmlFiles where fullpath=@fp
) AS T(x)
CROSS APPLY x.nodes('Items/Item/Objects/Object') As X(source)
Run Code Online (Sandbox Code Playgroud)

这一行使得查询非常缓慢:

X.source.query('../../guid').value('.','VARCHAR(36)') as item_guid
Run Code Online (Sandbox Code Playgroud)

这里适当的方法是什么?

xml sql t-sql sql-server sqlxml

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

交叉应用以从SQL Server中的Xml获取子父值

我有以下XML:

<root>
  <row value="US">
    <col value="00">Jon</col>
    <col value="01">David</col>
    <col value="02">Mike</col>
    <col value="03">Nil</col>
  </row>
  <row value="Canada">
    <col value="C1">Pollard</col>
  </row>
  <row value="Japan">
    <col value="J1">Yin</col>
    <col value="J2">Li</col>
  </row>
  <row value="India">
    <col value="MP">Ram</col>
    <col value="UP">Paresh</col>
    <col value="AP">Mohan</col>
  </row>
</root>
Run Code Online (Sandbox Code Playgroud)

我希望通过使用SQL Server查询以下输出:

US  00  Jon
US  01  David
US  02  Mike
US  03  Nil
Canada  C1  Pollard
Japan   J1  Yin
Japan   J2  Li
India   MP  Ram
India   UP  Paresh
India   AP  Mohan
Run Code Online (Sandbox Code Playgroud)

我正在使用以下SQL查询:

declare @x xml
set @x =
'<root>
  <row value="US">
    <col value="00">Jon</col>
    <col …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sqlxml sql-server-2008 cross-apply

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

SQL - 格式化XML响应值

我希望以下列格式接收我的响应XML ...

<PersonDetails>
    <Name>Ajay</Name>
    <Age>29</Age>
    <ContactDetails>
        <ContactDetail>
            <ContactType>Mobile</ContactType>
            <ContactValue>9565649556</ContactValue>
        </ContactDetail>
        <ContactDetail>
            <ContactType>Email</ContactType>
            <ContactValue>ajay@yahoo.com</ContactValue>
        </ContactDetail>
    </ContactDetails>
</PersonDetails>
Run Code Online (Sandbox Code Playgroud)

我这里有2个不同的选择语句......

SELECT name, age FROM Person_Details
WHERE id = 12

SELECT Contact_Type, Contact_Value FROM Person_Contact_Details
Where id = 12
Run Code Online (Sandbox Code Playgroud)

这里有任何建议......我试过FOR XML EXPLICIT/PATH的组合.

sql sqlxml

0
推荐指数
1
解决办法
305
查看次数

如何在 SQLXML 中获取每个属性的名称、值和父元素名称?

鉴于此 SQL:

DECLARE @content XML
SET @content =
'<people>
  <person id="1" bimble="1">
    <firstname bobble="gomble">John</firstname>
    <surname>Doe</surname>
  </person>
  <person id="2" bimble="11">
    <firstname bobble="zoom">Mary</firstname>
    <surname>Jane</surname>
  </person>
  <person id="4" bimble="10">
    <firstname bobble="womble">Matt</firstname>
    <surname>Spanner</surname>
  </person>
</people>'
Run Code Online (Sandbox Code Playgroud)

我想检索每个属性,它的值和父元素的名称作为表格:

Parent Name Attribute Name Attribute Value
----------- -------------- ---------------
person      id             1
person      bimble         1
firstname   bobble         gomble
person      id             2
person      bimble         11
firstname   bobble         zoom
person      id             4
person      bimble         10
firstname   bobble         womble
Run Code Online (Sandbox Code Playgroud)

xml sql sqlxml

0
推荐指数
1
解决办法
2180
查看次数