Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
OpenXML将XML文件导入SQL server表_Sql_Xml_Sql Server 2008_Import_Sql Server Openxml - Fatal编程技术网

OpenXML将XML文件导入SQL server表

OpenXML将XML文件导入SQL server表,sql,xml,sql-server-2008,import,sql-server-openxml,Sql,Xml,Sql Server 2008,Import,Sql Server Openxml,我正在尝试设置一个SQL作业,以便将XML文件导入SQL Server表。使用OPENXML,我似乎无法从文件中选择所需的特定数据。这是我的代码和XML数据。我试图选择设施和实体代码,但当我运行代码时,这些字段显示为空白 我想将这些字段转移到它们自己的表中 提前谢谢 Declare@xxml 选择@x=p 从OPENROWSET(大容量'\\vmirsdh01\fast\u data\Small.xml',单个\u BLOB)作为T(P) 选择@x 声明@hdoc int EXEC sp_xml

我正在尝试设置一个SQL作业,以便将XML文件导入SQL Server表。使用OPENXML,我似乎无法从文件中选择所需的特定数据。这是我的代码和XML数据。我试图选择设施和实体代码,但当我运行代码时,这些字段显示为空白

我想将这些字段转移到它们自己的表中

提前谢谢

Declare@xxml
选择@x=p
从OPENROWSET(大容量'\\vmirsdh01\fast\u data\Small.xml',单个\u BLOB)作为T(P)
选择@x
声明@hdoc int
EXEC sp_xml_preparedocument@hdoc OUTPUT,@x
挑选*
来自OPENXML(@hdoc,'/Report/Tablix1/Details\u Collection/Details',0)
(设施nvarchar(255)“@Facility”,
实体代码nvarchar(255)“@Entity\u Code')
exec sp_xml_removedocument@hdoc
'*************XML


这是一个可执行版本

Declare@xxml
选择@x=
'
声明@hdoc int
EXEC sp_xml_preparedocument@hdoc OUTPUT,@x
挑选*
来自OPENXML(@hdoc,'/Report/Tablix1/Details\u Collection/Details',0)
(设施nvarchar(255)“@Facility”,
实体代码nvarchar(255)“@Entity\u Code')
exec sp_xml_removedocument@hdoc

您的XML有一个名为
的开始标记,但您查询的是一个名为
的开始标记


虽然我不能保证在您修复后一切都会正常工作(我对OPENXML做的不多),但我很有信心这是一个问题。

您有一个默认名称空间,需要考虑它。
xmlns=“t_Report”

直接使用XML变量,查询如下所示

使用xmlnamespaces(默认的“T_报告”)
选择D.X.value(“@Facility”,“nvarchar(255)”,
D.X.value(“@Entity_Code”,“nvarchar(255)”)
从@x.nodes('/Report/Tablix1/Details\u Collection/Details')作为D(x)
如果出于某种原因希望使用openxml,则需要在sp_xml_preparedocument的第三个参数中声明名称空间

EXEC sp_xml_preparedocument@hdoc OUTPUT,@x','
挑选*
来自OPENXML(@hdoc,'/xx:Report/xx:Tablix1/xx:Details\u Collection/xx:Details',0)
(设施nvarchar(255)“@Facility”,
实体代码nvarchar(255)“@Entity\u Code')
exec sp_xml_removedocument@hdoc

斑点清晰。这是一个错误,但仍然不能解决问题。我在邮件上更正了它。谢谢