0

SQLSERVERデータベースを使用するASP.NETアプリケーションを作成しました。データベースの変更中に、.NET + DBMSの経験豊富な第一人者は、複数のテーブルの関連付け/マッピングの問題の1つは、.NETXML文字列でエレガントに解決できると述べました。私はこのテクニックについて聞いたことがありませんが、そのような「ハッキング」を知らないように聞こえないように、私は彼にそれについて尋ねることはできません。通常のデータベーステーブルのように(Linq to XMLを使用せずに)XML文字列をINSERT / UPDATE / DELETEする方法はありますか?

4

2 に答える 2

2

Linq to XML でない場合は、XML 列を意味している可能性があります。SQL Server 2005 以降では、テーブルにXML 列を定義できます。したがって、テーブルのフィールドに実際の XML を含めることができ、それらに対してXQuery操作を 実行できます。

あなたの文脈が何であり、問​​題の陳述が何であるかを知らないので、これが良い考えか悪い考えかはわかりません. 用途があり、特定の場合に役立ちますが、広範でスケーラブルな方法ではありません。それは本当にあなたがそれを何に使うかによって異なります。

于 2012-11-29T19:10:34.687 に答える
0

彼が何を意味しているのかはわかりませんがserialize、オブジェクトを にパラメータとしてXML渡すことは可能です。XMLStored 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 を使用している場合は、以下を参照してください。SQL Server 2008 および .NET (C#) のテーブル値パラメーターをTable-Valued Parameters参照してください。

于 2012-11-29T21:32:05.887 に答える