2017-07-14 15 views
-1

一時テーブルの列の一部のテキスト(マスク)を置き換えています。私は検索可能なテキストをテーブルの列に置き換えています。SQL Server - T-SQLで複数置き換えを行う方法

例:

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で許可される置換の制限に加えて。

+3

ネスト交換は超高速で、使用できる番号には制限がありません。読みやすいように書式を設定するのは難しいことですが、すでに始まった素晴らしいパターンがあるようです。 –

+0

私は入れ子の限界があると思った。私はそれをそのように見ます。 – Luiz

答えて

0

ネストされた置換よりもパフォーマンスが向上しません。

読みやすさを向上させる場合は、置き換えをUDFに入れることができますが、パフォーマンスが低下する可能性があります。

+0

私はそれを実行するとパフォーマンスが低下すると思います。私は両方のパフォーマンスと可読性を持つことはできません.. :( – Luiz

0

パフォーマンスを向上させるには、ネストされたリプレースを使用するよりも優れた解決策はありません。しかし、読めるようにするには、次のように書き直すことができます。

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 
関連する問題