在几个所需的单词后,将varchar列值插入另一个varchar列

时间:2013-04-04 07:09:05

标签: sql sql-server

我有一个名为ClinicalDocuments的表,它有一个名为vReportText的列,它保存了许多组件的soap文本。现在有另一个名为TreatmentOrders的表,其中包含一个vSoapText列,其中包含订单组件的soap文本。

我想编写一个SP,它将在治疗订单的标题之后更新临床文件的ReportText中的订单组件的肥皂文本。我知道它将涉及一些字符串操作来确定标题插入值后的确切位置,但我无法弄清楚它是如何可能的。

这是vReportText的样本数据

<table class="tblButton" border="0" cellspacing="0" cellpadding="0" width="100%">
        <tbody>
            <tr>
                <td align="left">
                    <font id="Comp_Heading" class="Comp_Heading" face="arial">&lt;&lt; MD Notes &gt;&gt;</font>
                </td>
            </tr>
            <tr id="traDetail" class="traDetail">
                <td>
                    <label onkeydown="return stopDataEntry()" id="lbl" oncut="" vbscript:window.event.returnvalue="false"
                        ondrop="" vbscript:window.event.returnvalue="false" ondblclick="lblDbl_Click('btn~~52437s80')"
                        contenteditable="false" onpaste="" vbscript:window.event.returnvalue="false"
                        ondrag="" vbscript:window.event.returnvalue="false">
                        <font id="Comp_Heading_Detail" class="Comp_Heading_Detail" face="arial"></font>
                    </label>
                </td>
            </tr>
        </tbody>
    </table>

vSoapText列还包含字符串中的html脚本,现在我想在字体标记 Comp_Heading_Detail 中插入vsoaptext列值。

我们的应用程序是在经典的asp中构建的,我不知道太多,所以我想如果我能用一些方便的脚本来做这件事,它会让我的生活变得轻松。非常感谢您的回复。

1 个答案:

答案 0 :(得分:1)

您可以使用REPLACE字符串函数

选项

假设你有两个带有这个模式的表

CREATE TABLE dbo.TreatmentOrders
 (
  Id int,
  vSoapText nvarchar(100)
  )

INSERT dbo.TreatmentOrders
VALUES(1, 'InsertedText1'),
      (2, 'InsertedText2')

CREATE TABLE dbo.ClinicalDocuments
 (
  Id int,
  TreatmentOrdersId int,  
  vReportText nvarchar(100)
  )

INSERT dbo.ClinicalDocuments
VALUES(1, 1, '123 Treatment Order is 123'),
      (2, 1, '12345 Treatment Order is 123'), 
      (3, 2, '123 Treatment Order is 123'),
      (4, 2, '12345 Treatment Order is 123')

UPDATE d
SET d.vReportText = 
  REPLACE(vReportText,'Treatment Order is','Treatment Order is ' + o.vSoapText)
FROM dbo.ClinicalDocuments d 
  JOIN dbo.TreatmentOrders o ON d.TreatmentOrdersId = o.Id

Id  TreatmentOrdersId vReportText
1   1                 123 Treatment Order is 123
2   1                 12345 Treatment Order is 123
3   2                 123 Treatment Order is 123
4   2                 12345 Treatment Order is 123

Id  TreatmentOrdersId vReportText   
1   1                 123 Treatment Order is InsertedText1 123
2   1                 12345 Treatment Order is InsertedText1 123
3   2                 123 Treatment Order is InsertedText2 123
4   2                 12345 Treatment Order is InsertedText2 123

SQLFiddle上的演示

对于文本“Comp_Heading_Detail”的更新位置,请使用此

UPDATE d
SET d.vReportText =
  REPLACE(vReportText, 'font id="Comp_Heading_Detail"', 'font id="' + o.vSoapText+ '"')
FROM dbo.ClinicalDocuments d 
  JOIN dbo.TreatmentOrders o ON d.TreatmentOrdersId = o.Id