Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用SQL Server进行多重替换-T-SQL_Sql Server_Sql Server 2008_Tsql_Replace - Fatal编程技术网

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

嵌套替换是超快速的,并且您可以使用的数量没有限制。清晰地格式化它可能会变得很有挑战性,但看起来你已经有了一个很好的模式,我想我有一个嵌套限制。我会这么看的。我想按函数做会失去性能。我不能同时具备性能和可读性….:(