0

我编写了一个使用 SQL SERVER 数据库的 ASP.NET 应用程序。在修改数据库期间,一位经验丰富的 .NET+DBMS 专家表示,关联/映射多个表的问题之一可以通过 .NET XML 字符串优雅地解决。我从来没有听说过这种技术,但不要听起来对这种“黑客”一无所知,我不能问他。有没有办法像常规数据库表一样插入/更新/删除 XML 字符串(不使用 Linq to XML)?

4

2 回答 2

2

如果不是 Linq to XML,那么他的意思可能是 XML Columns。SQL Server 2005 及更高版本允许您在表中定义XML 列。因此,您可以在表中的字段中包含实际的 XML,然后您可以对它们执行XQuery操作。

我不知道您的上下文是什么以及问题陈述是什么,所以我无法告诉您这是一个好主意还是坏主意。它有其用途,在某些情况下可能有用,但不能以广泛、可扩展的方式使用。这实际上取决于您将使用它的目的。

于 2012-11-29T19:10:34.687 回答
0

I am not sure what he meant, but it's possible to serialize your object to XML and pass the XML as a parameter to a Stored Procedure.

DECLARE @PersonJobsXML XML

SELECT  @PersonJobsXML = '<PersonJobs> 
<PersonId>24234</PersonId> 
<Job>
        <JobTitle>Engineer I</JobTitle>
        <CompanyName>ACME</CompanyName>
</Job> 
<Job>
    <JobTitle>Engineer II</JobTitle>
    <CompanyName>World Inc.</CompanyName>
</Job> 
<Job>
    <JobTitle>Engineer II</JobTitle>
    <CompanyName>Tek Corp</CompanyName>
</Job> 
</PersonJobs>'


SELECT  PersonJobs.Job.value('../PersonId[1]', 'INT') AS PersonId
      , PersonJobs.Job.value('JobTitle[1]', 'VARCHAR(200)') AS JobTitle
      , PersonJobs.Job.value('CompanyName[1]', 'VARCHAR(200)') AS CompanyName
FROM    @PersonJobsXML.nodes('//PersonJobs/Job') AS PersonJobs ( Job )

This allows you to pass a list of object to the database with just one call; the downside is that the size could be quite limited

But If you are using SQL server 2008 you should look at Table-Valued Parameters: see Table Value Parameters in SQL Server 2008 and .NET (C#)

于 2012-11-29T21:32:05.887 回答