属性的XML方法在SQL Server 2012中获取NULL值

山姆

我想Name从node提取属性的单个值<Adapter>但是我得到NULL值。有人可以帮我吗?

样本数据:

<SqlSyncProviderScopeConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" IsTemplate="false">
  <Adapter Name="[Kit].[KIT_Kit]" GlobalName="[Kit].[KIT_Kit]" TrackingTable="[DataSync].[KIT_Kit_dss_tracking]" SelChngProc="[DataSync].[KIT_Kit_dss_selectchanges_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" SelRowProc="[DataSync].[KIT_Kit_dss_selectrow_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" InsProc="[DataSync].[KIT_Kit_dss_insert_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" UpdProc="[DataSync].[KIT_Kit_dss_update_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" DelProc="[DataSync].[KIT_Kit_dss_delete_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" InsMetaProc="[DataSync].[KIT_Kit_dss_insertmetadata]" UpdMetaProc="[DataSync].[KIT_Kit_dss_updatemetadata]" DelMetaProc="[DataSync].[KIT_Kit_dss_deletemetadata]" BulkTableType="[DataSync].[KIT_Kit_dss_BulkType_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" BulkInsProc="[DataSync].[KIT_Kit_dss_bulkinsert_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" BulkUpdProc="[DataSync].[KIT_Kit_dss_bulkupdate_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" BulkDelProc="[DataSync].[KIT_Kit_dss_bulkdelete_9f5d350b-a9f7-48d2-8398-0a0d6de7595c]" InsTrig="[Kit].[KIT_Kit_dss_insert_trigger]" UpdTrig="[Kit].[KIT_Kit_dss_update_trigger]" DelTrig="[Kit].[KIT_Kit_dss_delete_trigger]">
    <Col name="KitGuid" type="uniqueidentifier" size="16" param="@P_1" pk="true" />
    <Col name="KitHrid" type="nvarchar" size="50" param="@P_2" collation="SQL_Latin1_General_CP1_CI_AS" />
    <Col name="StudyGuid" type="uniqueidentifier" size="16" param="@P_3" />
    <Col name="StudyVersionGuid" type="uniqueidentifier" size="16" param="@P_4" />
    <Col name="StudyKitDefGuid" type="uniqueidentifier" size="16" param="@P_5" />
    <Col name="SiteGuid" type="uniqueidentifier" size="16" param="@P_6" />
    <Col name="SourceSystemName" type="nvarchar" size="50" param="@P_7" collation="SQL_Latin1_General_CP1_CI_AS" />
    <Col name="ReplacedByGuid" type="uniqueidentifier" size="16" null="true" param="@P_8" />
    <Col name="FirstScannedOn" type="datetimeoffset" size="10" null="true" param="@P_9" />
    <Col name="SiteType" type="nvarchar" size="50" null="true" param="@P_10" collation="SQL_Latin1_General_CP1_CI_AS" />
    <Col name="CtmOrderGuid" type="uniqueidentifier" size="16" null="true" param="@P_11" />
    <Col name="EarlyExpirationOn" type="date" size="3" null="true" param="@P_12" />
    <Col name="DiscardedOn" type="datetimeoffset" size="10" null="true" param="@P_13" />
    <Col name="CreatedOn" type="datetimeoffset" size="10" param="@P_14" />
    <Col name="CreatedById" type="nvarchar" size="300" null="true" param="@P_15" collation="SQL_Latin1_General_CP1_CI_AS" />
    <Col name="ModifiedOn" type="datetimeoffset" size="10" null="true" param="@P_16" />
    <Col name="ModifiedById" type="nvarchar" size="300" null="true" param="@P_17" collation="SQL_Latin1_General_CP1_CI_AS" />
    <Col name="JobId" type="uniqueidentifier" size="16" null="true" param="@P_18" />
  </Adapter>  
</SqlSyncProviderScopeConfiguration>

这是我的查询:

;with xmlnamespaces('http://www.w3.org/2001/XMLSchema' as ns,
                    'http://www.w3.org/2001/XMLSchema-instance' as nf)
select config_data.value('(/ns:SqlSyncProviderScopeConfiguration/ns:Adapter/@name)[1]','varchar(100)')
from tableA

所需的输出:

[Kit].[KIT_Kit]

我无法弄清楚为什么输出为NULL?

marc_s

根节点上的这两个XML名称空间并不是真正相关的,它们都不是默认名称空间(仅通过使用xmlns标签(未提供前缀)定义),它们只有在XML节点使用各自的前缀时才适用-您的样本中的那些节点都不是。

因此,您应该能够使用以下命令获得所需的输出:

select 
    config_data.value('(/SqlSyncProviderScopeConfiguration/Adapter/@name)[1]','varchar(100)')
from tableA

如果未使用XML名称空间声明,则无需定义它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从SQL Server 2012中的XML列中提取属性

在SQL Server XML列中更改XML属性值

如何使用Java将SQL Server 2012中的NULL转换为Oracle中的空白(n / a)值

在SQL Server 2012中获取列名

如何在SQL SERVER 2012中使用OPENROWSET处理NULL值?

如何在 SQL Server 2012 中获取 0 之前的最后一个值

如何基于多个值获取每行的值SQL Server 2012

如何从SQL Server中的表查询Xml值和属性?

XML存在方法无法过滤SQL Server 2012中的记录

SQL Server和XML:如何从sql表中获取xml属性?

从我的SQL Server 2012中的多个表中获取数据

如何从SQL Server中的xml数据中获取带有条件的子元素和属性值?

xml路径的SQL Server添加属性和值

使用 xpath 从 SQL Server 中提取单个属性值 XML

从SQL Server的XML列中提取所有属性值

SQL Server通过用户定义属性值选择XML节点

在SQL Server 2012中读取具有动态行和属性的xml

从SQL Server中的相同xml列获取多个值

如何使用sql server在XML文档中获取包含具有给定属性值的子节点的节点?

从SQL Server 2012中的WeekDay整数获取WeekDay名称

使用名称空间更新SQL Server中的XML属性

获取所有在SQL Server中不只有NULL值的列的列表

当组内的值在 SQL Server 2012 中不同时求和

将字段的值传输到SQL Server 2012中的变量

在 CASE SQL SERVER 中避免 NULL 值

SQL Server:仅从值中获取数字

在SQL SERVER中获取日期范围内的列的第一个非null值的最快方法

如何从SQL Server中的聚合方法获取不同的值

SQL Server中NULL的Count函数的属性