2017-02-09 56 views
0

替換一個記錄多個字符串我有存儲作爲記錄一個HTML字符串:使用SQL Server

<div>   
<p>##RecipientFirstName##,</p>   
<p>##CustomerProjectOwnerName## with ##CustomerName## has approved your...</p>   </div> 

我要替換存儲在人表實際名稱的哈希標籤裏面的物品。我試過這個,但它返回3個不同的記錄。我需要用Replace語句替換哈希標記中的項目返回一條記錄。我的代碼:

SELECT mtg.Template, REPLACE(mtg.Template, '##RecipientFirstName##',(SELECT p.FirstName FROM dbo.Person p WHERE p.PersonId = 16)) , 
         REPLACE(mtg.Template, '##CustomerProjectOwnerName##',(SELECT p.FirstName FROM dbo.Person p WHERE p.PersonId = 16)) 
FROM dbo.MessageTypeGlobal mtg 
WHERE mtg.MessageTypeGlobalId = 1 

回答

1

您需要嵌套的替代語句:

SELECT REPLACE(
       REPLACE(mtg.Template, '##RecipientFirstName##', p.FirstName), 
     , '##CustomerProjectOwnerName##', p.FirstName) 
FROM dbo.MessageTypeGlobal mtg 
CROSS APPLY 
(
    SELECT FirstName FROM dbo.Person WHERE PersonId = 16 
) p 
WHERE mtg.MessageTypeGlobalId = 1 

我已經使用了交叉應用來防止需要一遍又一遍地寫子查詢。

1

我認爲這是你正在嘗試做的(如果你需要不同的子查詢):

select customtemplate = replace(replace(replace(mtg.Template 
    , '##CustomerProjectOwnerName##' 
     , (select p.FirstName from dbo.Person p where p.PersonId = 16)) 
    , '##RecipientFirstName##' 
     , (select p.FirstName from dbo.Person p where p.PersonId = 16)) 
    , '##CustomerName##' 
     , (select p.FirstName from dbo.Person p where p.PersonId = 16)) 
from dbo.MessageTypeGlobal mtg 
where mtg.MessageTypeGlobalId = 1