Sql server 如何使用SQL Server进行多重替换-T-SQL
我正在替换临时表中某列的一些文本(掩码)。我正在用一列表格替换可搜索文本 例如:Sql server 如何使用SQL Server进行多重替换-T-SQL,sql-server,sql-server-2008,tsql,replace,Sql Server,Sql Server 2008,Tsql,Replace,我正在替换临时表中某列的一些文本(掩码)。我正在用一列表格替换可搜索文本 例如: SELECT TOP 1000 * INTO TEMP_COMPL_L FROM TB_CONTRATO WHERE IDCAR_CON = 1 ALTER TABLE TEMP_COMPL_L ADD COMPL_TMP VARCHAR(1500) UPDATE TEMP_COMPL_L SET COMPL_TMP = '#FIRSTNAME#, URGENTE: Va a sua loja
SELECT TOP 1000 *
INTO TEMP_COMPL_L
FROM TB_CONTRATO
WHERE IDCAR_CON = 1
ALTER TABLE TEMP_COMPL_L
ADD COMPL_TMP VARCHAR(1500)
UPDATE TEMP_COMPL_L
SET COMPL_TMP = '#FIRSTNAME#, URGENTE: Va a sua loja no dia #DATE# e procure o Gerente #MANAGERNAME#.'
-- GET DATAS FROM MASKS HERE
UPDATE TEMP_COMPL_L
SET COMPL_TMP = REPLACE(REPLACE(REPLACE(COMPL_TMP,
'#FIRSTNAME#', LEFT(NOME_CLI, CHARINDEX(' ',NOME_CLI)-1)),
'#MANAGERNAME#', ISNULL(CONTT_LOJ,'')),
'#DATE#', CONVERT(VARCHAR(10), GETDATE(), 103)
)
FROM TEMP_COMPL_L
INNER JOIN TB_CLIENTE ON IDCLI_TMP = IDCLI_CLI
LEFT JOIN TB_LOJA ON IDLOJ_TMP = IDLOJ_LOJ
但是,这样它就完美地工作了,我需要对客户通知的20多个可能的掩码执行此操作,获取掩码并替换LOJA和CLIENTE表中相应列的值
有没有一种方法可以让你的表现更好、可读性更好?因为几个替换将非常混乱。除了SQL Server中允许的替换限制之外。您无法获得比嵌套替换更好的性能
如果您想使其更具可读性,可以将替换放在UDF中,但这可能会对性能造成小的影响。对于性能,可能没有比使用嵌套替换更好的解决方案了。但为了便于阅读,您可以按以下方式重新编写
SELECT TOP 1000 *
INTO TEMP_COMPL_L
FROM TB_CONTRATO
WHERE IDCAR_CON = 1
ALTER TABLE TEMP_COMPL_L
ADD COMPL_TMP VARCHAR(1500)
DECLARE @date VARCHAR(10)
SELECT @date = CONVERT(VARCHAR(10), GETDATE(), 103)
-- GET DATAS FROM MASKS HERE
;With DataMask AS
(
SELECT T.IDCLI_CLI
,ISNULL(T.NOME_CLI,'#FIRSTNAME#') as First_Name
,ISNULl(L.CONTT_LOJ,'#MANAGERNAME#') as Manager_Name
FROM TB_CLIENTE T
LEFT JOIN TB_LOJA L
ON T.IDLOJ_TMP = L.IDLOJ_LOJ
)
UPDATE TMP
SET COMPL_TMP = D.First_Name + ', URGENTE: Va a sua loja no dia ' + @date + ' e procure o Gerente ' + Manager_Name + '.'
FROM TEMP_COMPL_L TMP
JOIN DataMask D
ON TMP.IDCLI_TMP = D.IDCLI_CLI
嵌套替换是超快速的,并且您可以使用的数量没有限制。清晰地格式化它可能会变得很有挑战性,但看起来你已经有了一个很好的模式,我想我有一个嵌套限制。我会这么看的。我想按函数做会失去性能。我不能同时具备性能和可读性….:(