SQLSERVERデータベースを使用するASP.NETアプリケーションを作成しました。データベースの変更中に、.NET + DBMSの経験豊富な第一人者は、複数のテーブルの関連付け/マッピングの問題の1つは、.NETXML文字列でエレガントに解決できると述べました。私はこのテクニックについて聞いたことがありませんが、そのような「ハッキング」を知らないように聞こえないように、私は彼にそれについて尋ねることはできません。通常のデータベーステーブルのように(Linq to XMLを使用せずに)XML文字列をINSERT / UPDATE / DELETEする方法はありますか?
質問する
143 次
2 に答える
2
Linq to XML でない場合は、XML 列を意味している可能性があります。SQL Server 2005 以降では、テーブルにXML 列を定義できます。したがって、テーブルのフィールドに実際の XML を含めることができ、それらに対してXQuery操作を 実行できます。
あなたの文脈が何であり、問題の陳述が何であるかを知らないので、これが良い考えか悪い考えかはわかりません. 用途があり、特定の場合に役立ちますが、広範でスケーラブルな方法ではありません。それは本当にあなたがそれを何に使うかによって異なります。
于 2012-11-29T19:10:34.687 に答える
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 を使用している場合は、以下を参照してください。SQL Server 2008 および .NET (C#) のテーブル値パラメーターをTable-Valued Parameters
参照してください。
于 2012-11-29T21:32:05.887 に答える