Я пытаюсь получить все имена полей из формы, хранящейся в виде XML в SQL Server, на основе значения атрибута (культура).На самом деле, я могу получить текстовое значение, но они объединяются в столбец FieldName.
Структура XML выглядит следующим образом:
<Form>
<Field>
<Field Name="email" Type="text" ColumnSize="6">
<Localizations>
<Localization Culture="fr">
<Text>Adresse couriel</Text>
<Placeholder>Entrez votre adresse courriel</Placeholder>
</Localization>
<Localization Culture="fr">
<Text>Email</Text>
<Placeholder>Enter your email</Placeholder>
</Localization>
</Localizations>
</Field>
</Fields>
</Form>
SQL-запрос:
DECLARE @language VARCHAR(2)
SET @language = 'en'
SELECT
c.query('data(@Name)') AS FieldUniqueName,
c.query('data(./Localizations/Localization/Text)') AS FieldName,
c.query('data(@Type)') AS FieldType
FROM dbo.Form Form CROSS APPLY FormContent.nodes('/Form/Fields/Field') x(c)
WHERE Id = @formId
AND FormContent.exist('/Form/Fields/Field/Localizations/Localization[@Culture=sql:variable("@language")]') = 1
Результат выглядит следующим образом:
FieldUniqueName | FieldName | FieldType
name | Nom Name | text
email | Adresse couriel Email | text
phone | Téléphone Phone Number| text
Оба языка находятся в столбце FieldName!
Я пробовал также с:
...
c.value('data(./Localizations/Localization/Text)[1]', 'VARCHAR(100)') AS FieldName,
...
Но мне нужно выбрать между [1]
или [2]
, чтобы получить правильный язык ...