你可以試試這個。我爲@ Codes1添加了答案,但它也適用於@ Codes2和@ Codes3。
DECLARE @TblCode TABLE (Id INT, Code VARCHAR(2))
INSERT INTO @TblCode
VALUES(1, 'A'),
(2,'B'),
(3,'C'),
(4,'D')
DECLARE @Codes1 VARCHAR(10) = '3,4'
DECLARE @Codes2 VARCHAR(10) = '1'
DECLARE @Codes3 VARCHAR(10) = NULL
DECLARE @CodesOut VARCHAR(10) = ''
;WITH CTE_1 AS (
SELECT CODE= @Codes1 + ','
)
, CTE_2 AS -- It silit text to rows
(
SELECT RIGHT(CTE_1.CODE, LEN(CTE_1.CODE) - CHARINDEX(',',CTE_1.CODE)) CODE , SUBSTRING(CTE_1.CODE, 0, CHARINDEX(',',CTE_1.CODE)) ID, CHARINDEX(',',CTE_1.CODE) AS CI
FROM CTE_1
UNION ALL
SELECT RIGHT(CTE_2.CODE, LEN(CTE_2.CODE) - CHARINDEX(',',CTE_2.CODE)) CODE , SUBSTRING(CTE_2.CODE, 0, CHARINDEX(',',CTE_2.CODE)) ID, CHARINDEX(',',CTE_2.CODE) AS CI
FROM CTE_2 WHERE LEN(CTE_2.CODE) > 0
)
SELECT @CodesOut = @CodesOut + C.Code FROM CTE_2 INNER JOIN @TblCode C ON CTE_2.ID = C.Id
SELECT @CodesOut
結果:
CD
不要以逗號分隔的字符串存儲代碼。你的代碼會簡單得多。 –
@GordonLinoff,我完全理解。過去多年來一直如此。無法幫助它。我不確定你是否記得,但你之前回答過類似的問題 - https://stackoverflow.com/questions/44415270/sql-string-combine-based-on-id – Sajal
。 。這個問題是不同的(它對數據格式有相同的反應)。它不是試圖替換原地。你應該真的修復你的數據格式。 –