У меня есть таблица с именем People
со столбцами типа данных xml
с именем properties
.Я использовал это для хранения случайной информации о каждом человеке, в основном позволяя людям хранить любые дополнительные данные, которые будут добавлены в будущем без перепроектирования базы данных.Не у всех людей будут одинаковые элементы в 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
Я знаю, что это неверно, но я получаю сообщение об ошибке "требуется одиночный код (или пустая последовательность)", и я не совсем уверен, что пошло не так.
И второй вопрос: я объединил несколько старых баз данных в один список пользователей, однако старые интерфейсы баз данных по-прежнему должны иметь доступ к своим битам данных.Мой план состоял в том, чтобы создать представление для каждого внешнего интерфейса базы данных с макетом, соответствующим его потребностям, со ссылкой на основную таблицу сотрудников.Однако некоторые из их полей теперь хранятся в XML.Есть ли способ создать представление для обновления XML, не видя xml, т.е. чтобы оно выглядело и действовало так же, как представление любой другой таблицы.Я надеюсь, что объяснил это правильно.Для каждого представления у меня будет определенный набор свойств XML, которые мне нужно отредактировать, и все записи будут иметь их, так что это не так случайно.
Спасибо за любую помощь.