Maddy_1008 Ответов: 1

Как обновить значение атрибута XML в SQL server.


CREATE TABLE [dbo].[tbl_UIConfig](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[PolicyName] [nvarchar](50) NULL,
	[XmlData] [xml] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


INSERT INTO [dbo].[tbl_UIConfig] VALUES('Policy1', '<main>
<mainUI>
<AppList>
<AppConfig>
	<AppSettings name="notepad" path="c:\Windows\System32\notepad.exe" />
	<AppDesignSettings appLogoName="notepad_534hjj45j35.png" />
</AppConfig>
<AppConfig>
	<AppSettings name="wordpad" path="C:\Program Files\Windows NT\Accessories\wordpad.exe" />
	<AppDesignSettings appLogoName="wordpad_nmb8mn98b908.png" />
</AppConfig>
<AppConfig>
	<AppSettings name="mspaint" path="c:\Windows\System32\mspaint.exe" />
	<AppDesignSettings appLogoName="mspaint_sdf9sd8f89sf.png" />
</AppConfig>
</AppList>
</mainUI>
</main>')

У меня есть таблица, которая содержит столбец XML, и этот XML содержит сведения о приложении.
Я хочу сделать функциональность, где, если пользователь удаляет изображение из галереи изображений, то я хочу обновить этот XML.

Я хочу обновить это имя изображения до значения по умолчанию(defaultimg.png) в этом XML. т. е. я хочу обновить атрибут appLogoName элемента AppDesignSettings каждого элемента AppConfig, если appLogoName содержит то же изображение, которое пользователь удалил.

Эффект должен происходить в каждой строке таблицы. и он должен проверить каждый узел AppConfig из AppList.

Пожалуйста, прокомментируйте, если у вас есть какие-либо путаницы.

Спасибо.

Что я уже пробовал:

Я пробовал, где только первая соответствующая запись получает обновление. Но я хочу обновить каждый соответствующий элемент AppList и из каждой строки таблицы XML.

1 Ответов

Рейтинг:
0

Maddy_1008

Спасибо за ваш ответ. Но я хочу обновить каждый соответствующий элемент AppList и из каждой строки таблицы XML.

...
Спасибо.

Eric Lynch

Указанная ссылка предоставляет пример обновления XML в нескольких строках таблицы. В зависимости от конкретного требования вам необходимо либо изменить, либо опустить предложение WHERE в обновлении SQL. Чтобы точно изменить то, что обновляется в каждом XML-документе, вам нужно будет настроить селектор XPATH.

Как уже упоминалось в ответе, это для того, чтобы "начать работу"...а не для того, чтобы написать ее для вас.

Из вашего ответа неясно, возникают ли у вас проблемы с обновлением нескольких строк SQL, проблемы с обновлением нескольких элементов XML (предположительно в столбце для каждой из этих строк) или если вы объединяете эти два очень разных понятия.

Если у вас возникли проблемы с обновлением нескольких строк SQL, вам следует лучше ознакомиться с командой SQL UPDATE, которая делает это довольно легко. Смотрите: https://www.w3schools.com/sql/sql_update.asp.

Если у вас возникли проблемы с пониманием методов типа данных XML, которые позволяют вам играть с текстом XML, см.: https://docs.microsoft.com/en-us/sql/t-sql/xml/xml-data-type-methods?view=sql-server-2017.

Если у вас возникли проблемы с выбором нескольких XML-элементов для обновления, вам следует лучше ознакомиться с XPATH. Смотрите: https://www.w3schools.com/xml/xpath_syntax.asp-да.

Все необходимые детали демонстрируются в оригинальной ссылке (приведенной в решении).

Если вам нужно, чтобы кто-то собрал все части вместе и написал их для вас, это не совсем то, для чего нужны вопросы и ответы, но здесь вам все равно может повезти. Однако вам нужно будет предоставить гораздо больше деталей в вашем вопросе, чтобы кто-то сделал это.

Вы с большей вероятностью получите помощь, если у вас есть какой-то конкретный вопрос об элементе более крупной проблемы.

В любом случае, надеюсь, что это поможет вам либо начать работу над решением, либо прояснить свой вопрос. Желаю удачи.