Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL查询中选择XML数据-未返回值_Sql_Sql Server - Fatal编程技术网

从SQL查询中选择XML数据-未返回值

从SQL查询中选择XML数据-未返回值,sql,sql-server,Sql,Sql Server,Xml列不返回任何行。 下面创建了一个表类型和插入到该表中的xml值。执行以下两个查询后,不会返回任何值。 Xml数据是有效的数据 DECLARE @Test TABLE (Id INT IDENTITY (1,1), XMLDATA XML) INSERT INTO @test SELECT ' <TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" V

Xml列不返回任何行。
下面创建了一个表类型和插入到该表中的xml值。执行以下两个查询后,不会返回任何值。
Xml数据是有效的数据

DECLARE @Test TABLE (Id INT IDENTITY (1,1), XMLDATA XML)

INSERT INTO @test
SELECT '
<TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" Version="2.20.00">
    <TXLifeRequest PrimaryObjectID="Holding_1">
        <CorrelationGUID>4b30545a-158b-441a-a37a-0b259f757059</CorrelationGUID>
    </TXLifeRequest>
</TXLife>'

SELECT 
      Id
    , XMLDATA.query('//CorrelationGUID') AS 'TransType'
    , XMLDATA
FROM @test

SELECT C.value('./CorrelationGUID[1]', 'varchar(50)') AS 'TransType'
FROM @test
CROSS APPLY XMLDATA.nodes('/TXLife/TXLifeRequest') n (C)
DECLARE@Test表(Id INT-IDENTITY(1,1),XMLDATA-XML)
插入@test
选择'
4b30545a-158b-441a-a37a-0b259f757059
'
挑选
身份证件
,XMLDATA.query('//CorrelationGUID')作为“TransType”
,XMLDATA
来自@test
选择C.value('./CorrelationGUID[1]','varchar(50')作为'TransType'
来自@test
交叉应用XMLDATA.nodes('/TXLife/TXLifeRequest')n(C)
试试这个-

DECLARE @XML XML
SELECT  @XML = '
<TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" Version="2.20.00">
    <TXLifeRequest PrimaryObjectID="Holding_1">
        <CorrelationGUID>4b30545a-158b-441a-a37a-0b259f757059</CorrelationGUID>
    </TXLifeRequest>
</TXLife>'

;WITH XMLNAMESPACES (DEFAULT 'http://ACORD.org/Standards/Life/2')
SELECT t.c.value('CorrelationGUID[1]', 'UNIQUEIDENTIFIER')
FROM @XML.nodes('//TXLifeRequest') t(c)

好吧,如果我用
createtable
测试您的代码,那么未过滤的select就可以正常工作了。但是,第二个筛选的select不会返回任何结果

如果我将查询更改为指定正确的名称空间,如in的答案

WITH XMLNAMESPACES (DEFAULT 'http://ACORD.org/Standards/Life/2')
SELECT
        C.value('./CorrelationGUID[1]', 'varchar(50)') AS 'TransType'
    FROM
        Test
    CROSS APPLY
        XMLDATA.nodes('/TXLife/TXLifeRequest') n (C)

您可以看到,。

您需要声明名称空间。试试这个:

SELECT
  XMLDATA.value('declare namespace L="http://ACORD.org/Standards/Life/2";(//L:CorrelationGUID)[1]',
                'UNIQUEIDENTIFIER') AS 'TransType'
FROM   @test

UNION ALL

SELECT
  C.value('declare namespace L="http://ACORD.org/Standards/Life/2";(./L:CorrelationGUID)[1]',
          'UNIQUEIDENTIFIER') AS 'TransType'
FROM   @test
CROSS APPLY
  XMLDATA.nodes('declare namespace L="http://ACORD.org/Standards/Life/2";/L:TXLife/L:TXLifeRequest') N(C)

查看它是否工作。

TransType
为空。
SELECT
  XMLDATA.value('declare namespace L="http://ACORD.org/Standards/Life/2";(//L:CorrelationGUID)[1]',
                'UNIQUEIDENTIFIER') AS 'TransType'
FROM   @test

UNION ALL

SELECT
  C.value('declare namespace L="http://ACORD.org/Standards/Life/2";(./L:CorrelationGUID)[1]',
          'UNIQUEIDENTIFIER') AS 'TransType'
FROM   @test
CROSS APPLY
  XMLDATA.nodes('declare namespace L="http://ACORD.org/Standards/Life/2";/L:TXLife/L:TXLifeRequest') N(C)