properties
と呼ばれるxml
というデータ型の列を持つPeople
という名前のテーブルがあります。私はこれを使用して、基本的にデータベースの再設計なしに将来追加される余分なデータを各自が格納できるようにする、それぞれの人に関するランダムな情報を格納しました。すべての人がXMLに同じ要素を持つわけではありません。SQL Server 2005クエリXML列データ
CREATE TABLE [dbo].[Person](
[PersonID] [bigint] IDENTITY(1,1) NOT NULL,
[PersonType] [nvarchar](50) NULL,
[Title] [nvarchar](5) NULL,
[Forename] [nvarchar](60) NULL,
[Surname] [nvarchar](60) NULL,
[Company] [nvarchar](60) NULL,
[Properties] [xml] NULL
)
XMLの例は次のとおりです。
<PropertyList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property Name="Class">Class A</Property>
<Property Name="CarRegistration">123456</Property>
<Property Name="MedicalNotes">None</Property>
</PropertyList>
最初の質問は、私は私がに保存された条件に一致するレコードのリストを取得できるようになりますSQLクエリを見つけることができないようですxml。
たとえば、すべてのレコードを取得するには、Class="Class A"
を入力します。 「シングルトン(または空のシーケンス)が必要です」
SELECT
PersonID,
Properties.value('/PropertyList/Property[@Name="Class"][1]','nvarchar(50)')
FROM Person
私は、これは間違っている知っているが、私はエラーを取得するには、私は間違っていただきました、非常にわからない:私が試してみました。
2番目の問題は、いくつかの古いデータベースを1人の人物リストに結合しましたが、古いデータベースのフロントエンドは依然としてデータのビットにアクセスする必要があります。私の計画は、ニーズに応じたレイアウトを持つデータベースフロントエンドのビューをすべてメインの人物表に戻して作成することでした。ただし、そのフィールドの一部はXMLに格納されるようになりました。 xmlを見ることなくXMLを更新するビューを作成する方法はありますか?つまり、他のテーブルのビューと同じように見えます。私はそれを正しく説明してくれることを望みます。各ビューには、編集に必要なXMLプロパティの特定のセットがあり、すべてのレコードにはそのようにランダムではありません。
ありがとうございました。
これはまさに彼らがすでに試みたことではありませんか? –
@Ash Burlaczenko:** NO !! ** XQuery式に括弧を追加しました(この場合は必須です!)かっこなし(元の投稿)、それは動作しないし、エラーを与える - 私のかっこで、それは動作します - 厳密にチェック! –
@ marc_s:なぜ括弧が違いを生むべきか説明できますか?もちろん、理論的には、Properties列の値が複数の/ PropertyList要素を含むXMLドキュメントの断片である場合、括弧は「Classという名前の最初のプロパティ」と「各PropertyListのClassという名前の最初のプロパティ」の違いを意味します。しかし、各Properties列の値には1つの/ PropertyList要素しかないと仮定すると、違いはありません。実際、彼の例では、 '' Class ''という名前のPropertyが1つしかないので、 '[1]'は全く違いを生むべきではありません。 – LarsH