我已经听过播客博客一段时间了,我希望我不要打破这个。 问题是:我必须将xml插入数据库。这将是已定义的表和字段。那么实现这一目标的最佳方法是什么?到目前为止,我倾向于编程。我一直看到varios选项,一个是数据传输对象(DTO),在SQL Server中有sp_xml_preparedocument,用于将XML传输到对象和代码。
我正在使用CSharp和SQL Server 2005.这些字段不是XML字段,它们是通常的SQL数据类型。
答案 0 :(得分:2)
为了尝试和帮助,我们可能需要一些澄清。也许通过重述问题,您可以告诉我们这是您要问的问题:
如何在不依赖内置xml类型的情况下将现有xml导入SQL 2005数据库?
您已经提到的一个相当直接的解决方案是 sp_xml_preparedocument ,与 openxml 结合使用。
希望以下示例说明正确的用法。有关更完整的示例,请查看Using OPENXML上的MSDN文档。
declare @XmlDocumentHandle int
declare @XmlDocument nvarchar(1000)
set @XmlDocument = N'<ROOT>
<Customer>
<FirstName>Will</FirstName>
<LastName>Smith</LastName>
</Customer>
</ROOT>'
-- Create temp table to insert data into
create table #Customer
(
FirstName varchar(20),
LastName varchar(20)
)
-- Create an internal representation of the XML document.
exec sp_xml_preparedocument @XmlDocumentHandle output, @XmlDocument
-- Insert using openxml allows us to read the structure
insert into #Customer
select
FirstName = XmlFirstName,
LastName = XmlLastName
from openxml ( @XmlDocumentHandle, '/ROOT/Customer',2 )
with
(
XmlFirstName varchar(20) 'FirstName',
XmlLastName varchar(20) 'LastName'
)
where ( XmlFirstName = 'Will' and XmlLastName = 'Smith' )
-- Cleanup xml document
exec sp_xml_removedocument @XmlDocumentHandle
-- Show the data
select *
from #Customer
-- Drop tmp table
drop table #Customer
如果您有一个xml文件并且正在使用C#,那么定义一个类似于上面的内容然后将整个xml文件内容作为字符串传递给存储过程的存储过程应该会给你将xml导入现有表格的相当直接的方法。
答案 1 :(得分:0)
如果您的XML符合特定的XSD架构,您可以查看使用“xsd.exe”命令行工具生成可以将XML绑定到的C#对象类,然后使用以下属性生成插入语句:那些对象:MSDN XSD Doc
答案 2 :(得分:0)
仔细阅读本文档,它将为您提供选项:
答案 3 :(得分:0)
您可能希望使用XSLT将XML传输到SQL语句中......即
<xml type="user">
<data>1</data>
<data>2</data>
<xml>
然后XSLT看起来像
<xsl:template match="xml">
INSERT INTO <xsl:value-of select="@type" /> (data1, data2) VALUES (
'<xsl:value-of select="data[1]" />',
'<xsl:value-of select="data[2]" />');
</xsl:template>
匹配语句很可能不是根节点,但希望你能得到这个想法。您可能还需要在xsl:text中包装非xsl:value-of部分,以防止将额外字符转储到查询中。而且你必须确保XSLT的输出是文本。这就是说你可以得到一个可以通过DB运行的SQL语句列表。或者您可以使用XSLT输出可以作为存储过程加载的T-SQL语句。