Я новичок, когда дело доходит до SQL, и мне нужен совет.
У меня есть таблица xzy.В этой таблице у меня есть несколько столбцов - при желании обновить раздел одного из столбцов - defdetails.
Пример столбца DefDetails:
<SYSTEM>
<ScheduledItemDef ID="943bc40afb6beda35875f142469a526c35e264c6c6" Name="**3G Capped Users Check - Daily Task**" Version="1,0" SubType="" DoNotLocalize="FALSE" Scope="Core" Culture="Invariant" View="(None)" Disabled="FALSE" Units="Months">
<LastModBy>USER</LastModBy>
<LastModDateTime>2018-06-28T12:41:08</LastModDateTime>
<Translations>
<Translation Key="alias#en-US">Monthly - Reports - PRTG & Supp Calls - CUSTOMER - TECHNICIAN</Translation><Translation Key="description#en-US">Monthly -Reports - PRTG & Supp Calls - CUSTOMER - TECHNICIAN - New Business Development</Translation>
</Translations>
<ScheduleGroup ID="" />
<ActionType>OneStep</ActionType>
<ExceptionType>None</ExceptionType>
<ExecutionType>Recurring</ExecutionType>
<FirstRun DateTime="2018-08-03T08:00:00" UseServerTime="FALSE" TimeZoneId="South Africa Standard Time" TimeZoneName="(UTC+02:00) Harare, Pretoria" BaseUtcOffset="PT2H" />
<InstanceNum>1</InstanceNum>
<ContinueOnError Value="TRUE" />
<ActionProperties>
<Property Name="DefType">OneStepDef</Property>
<Property Name="Folder">943bb517dde2d2838d511e4991ad53667caa4b06d0</Property>
<Property Name="Owner">6dd53665c0c24cab86870a21cf6434ae</Property>
<Property Name="Scope">Global</Property>
<Property Name="DefId">943bc40c6a82e8f9c877514061bd3f031b5cd0279e</Property>
<Property Name="ScopeOwner">(None)</Property>
</ActionProperties>
<Months Number="1" DayNumber="2" DayOfWeek="Monday" WeekOfMonth="NotSet" />
<Recurrence StartDate="2018-08-03T14:41:00" MaxNumber="-1" />
<TestOnly Value="FALSE" />
</ScheduledItemDef>
</SYSTEM>
Пример столбца DefName:
Monthly -Reports - PRTG & Supp Calls - Customer Name
Раздел, который мне нужно обновить, это Name = "*" в строке 2. Мне нужно обновить только этот раздел с помощью Name="{the DefName Column}"
.
Раздел DefDetails Name всегда отличается, поэтому яне могу жестко закодировать это в замену, и мне нужно обновить несколько записей в таблице таким образом.
Буду признателен за любую помощь.
Я пытался сделать это вручную, но объем работы утомителен.Я попытался использовать замену, но это требует от меня жесткого кодирования моих «Найти строку» и «Заменить строку», что также не очень хорошо, так как мне нужно обновить все записи в таблице, и мне придется делать это несколько раз в течение жизненного цикла программного обеспечения.,
DECLARE @Text VARCHAR(MAX);
SET @Text = (SELECT TOP 150 DefDetails FROM SYSTEMScheduler)
SELECT
SUBSTRING(@Text, CHARINDEX('Name="', @Text),
CHARINDEX('" Version', @text) - CHARINDEX('Name="', @Text) + LEN('"')) AS DefDetailsName
FROM
[dbo].[SYSTEMScheduler] [DefDetails]
Столбец DefDetails
должен быть обновлен ниже:
<SYSTEM>
<ScheduledItemDef ID="943bc40afb6beda35875f142469a526c35e264c6c6" Name="**Monthly -Reports - PRTG & Supp Calls - Customer Name**" Version="1,0" SubType="" DoNotLocalize="FALSE" Scope="Core" Culture="Invariant" View="(None)" Disabled="FALSE" Units="Months">
<LastModBy>USER</LastModBy>
<LastModDateTime>2018-06-28T12:41:08</LastModDateTime>
<Translations>
<Translation Key="alias#en-US">Monthly - Reports - PRTG & Supp Calls - CUSTOMER - TECHNICIAN</Translation>
<Translation Key="description#en-US">Monthly -Reports - PRTG & Supp Calls - CUSTOMER - TECHNICIAN - New Business Development</Translation>
</Translations>
<ScheduleGroup ID="" />
<ActionType>OneStep</ActionType>
<ExceptionType>None</ExceptionType>
<ExecutionType>Recurring</ExecutionType>
<FirstRun DateTime="2018-08-03T08:00:00" UseServerTime="FALSE" TimeZoneId="South Africa Standard Time" TimeZoneName="(UTC+02:00) Harare, Pretoria" BaseUtcOffset="PT2H" />
<InstanceNum>1</InstanceNum>
<ContinueOnError Value="TRUE" />
<ActionProperties>
<Property Name="DefType">OneStepDef</Property>
<Property Name="Folder">943bb517dde2d2838d511e4991ad53667caa4b06d0</Property>
<Property Name="Owner">6dd53665c0c24cab86870a21cf6434ae</Property>
<Property Name="Scope">Global</Property>
<Property Name="DefId">943bc40c6a82e8f9c877514061bd3f031b5cd0279e</Property>
<Property Name="ScopeOwner">(None)</Property>
</ActionProperties>
<Months Number="1" DayNumber="2" DayOfWeek="Monday" WeekOfMonth="NotSet" />
<Recurrence StartDate="2018-08-03T14:41:00" MaxNumber="-1" />
<TestOnly Value="FALSE" />
</ScheduledItemDef>
</SYSTEM>
По сути, я хотел бы сделать что-то следующим образом:
Select substring between Name=" and "Version and replace with Column DefName
Я знаю, чтоупрощает, но это вкратце то, что я хотел бы сделать.