我编写了一个使用SQL SERVER数据库的ASP.NET应用程序。在修改数据库期间,.NET + DBMS的一位经验丰富的大师说,使用.NET XML字符串可以很好地解决关联/映射多个表的问题之一。我从来没有听说过这种技术,但是听不到对这种“黑客”的无知,我不能问他这件事。有没有办法像常规数据库表那样INSERT / UPDATE / DELETE XML字符串(不使用Linq到XML)?
答案 0 :(得分:2)
如果它不是Linq to XML,那么他可能指的是XML Columns。从SQL Server 2005开始,您可以在表中定义XML Columns。因此,您可以在表中的字段中包含实际的XML,然后可以对它们执行XQuery操作。
我不知道你的背景是什么以及问题陈述是什么,所以我不能告诉你这是好主意还是坏主意。它有其用途,在某些情况下可能很有用,但不能以广泛的,可扩展的方式使用。这实际上取决于你将用它做什么。
答案 1 :(得分:0)
我不确定他的意思,但可以serialize
将您的对象XML
传递给XML
并将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 )
。
{{1}}
这允许您只需一次调用即可将对象列表传递给数据库;缺点是尺寸可能非常有限
但如果您使用的是SQL Server 2008,则应该查看Table-Valued Parameters
:请参阅Table Value Parameters in SQL Server 2008 and .NET (C#)