我正在使用SQL Server和VB.NET。在我的SQL中,我使用以下内容:
select top 1 * from tablename where 1=0 for xml auto, type, xmlschema
获取tablename的架构。然后我用
select * from tablename where ID=1 for xml, auto, type, elements xsinil, root('xml')
获取我感兴趣的数据行。
如果我在VB中使用以下代码:
Private ds as New Dataset
ds.ReadXMLSchema("xmlschema.txt")
我最终得到的ds包含一个具有正确定义的列集的表
如果我再尝试:
ds.ReadXML("xmldata.txt")
代码成功,但我的数据集表中没有任何行。
我的问题是,为了将SQL Server创建的xml数据读入具有SQL Server指定的模式的数据表,我需要做些什么。
答案 0 :(得分:0)
您需要在第二个(数据)查询中包含XMLSchema
子句以及第一个(模式)查询。如果不这样做,那么数据输出将缺少名称空间,因此不符合模式。
您需要通过限定XMLSchema
指令(例如XMLSchema('http://tempuri.org')
)来为您的架构指定目标命名空间。如果不这样做,那么SQL Server将在每个查询中为您生成一个名称空间,它们可能不匹配。
您需要确保两个查询的列列表和FOR XML
子句完全相同。在您的示例中,您在数据查询中指定了xsinil
,但未在架构查询中指定。
所以在这里你需要为模式查询指定类似的东西
select top 1 * from tablename
where 1=0
for xml auto, type, elements xsinil, root('xml'), xmlschema('http://tempuri.org')
这是数据查询
select * from tablename
for xml auto, type, elements xsinil, root('xml'), xmlSchema('http://tempuri.org')