用同一表中另一列的值更新每一行的一部分

时间:2018-12-28 06:25:55

标签: sql-server sql-update

我是SQL的新手,需要一些建议。

我有一张桌子xzy。在此表中,我有多个列-要更新其中一个列的一部分-详细信息。

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 &amp; Supp Calls - CUSTOMER - TECHNICIAN</Translation><Translation Key="description#en-US">Monthly -Reports - PRTG &amp; 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

我需要更新的部分是第2行上的Name =“ *”。我只需要用Name="{the DefName Column}"更新该部分。

DefDetails名称部分始终不同,因此我无法将其硬编码为替换,并且需要以这种方式更新表中的多个记录。

任何帮助将不胜感激。

我尝试手动执行此操作,但是工作量繁琐。我尝试使用替换,但是这需要我对“查找字符串”和“替换字符串”进行硬编码,这也不是很重要,因为我需要更新表中的所有记录,并且需要在软件生命周期中多次执行此操作。

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 &amp; Supp Calls - CUSTOMER - TECHNICIAN</Translation>
            <Translation Key="description#en-US">Monthly -Reports - PRTG &amp; 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

我知道这太简单了,但这简而言之就是我想做的。

0 个答案:

没有答案