存盤程序只有 1 個宣告為 varchar(max) 的引數。
我需要傳遞多個引數,所以我將它們組合成一個字串,如下所示:
"Ref=2211010001165381;Src=ONLN;,Ref=2211010001165481;Src=ONLN;,Ref=2211010001165581;Src=ONLN;"
如何拆分值并將它們分配到各自的列中?
以下是我當前的查詢,其中 Column Ref 看起來不錯:
WHILE LEN(@LISTMIXTRD) > 0 BEGIN
select REPLACE(LEFT(@LISTMIXTRD, CHARINDEX(';Src=', @LISTMIXTRD ';Src=')-1),'Ref=','') as Ref , LEFT(@LISTMIXTRD, CHARINDEX(';Src=', @LISTMIXTRD ';Src=')-1) as Src SET @LISTMIXTRD = STUFF(@LISTMIXTRD, 1, CHARINDEX(',', @LISTMIXTRD ','), '')
END
uj5u.com熱心網友回復:
老實說,我真的建議您將輸入值更改為 SQL Server 可以處理的內容,而無需進行大量字串替換。JSON 或 XML 會好得多。
此解決方案嘗試將值轉換為 JSON 值,但它基于您的一個示例。如果您的資料狀況較差,則更有理由解決問題。
DECLARE @YourParameter nvarchar(MAX) = N'"Ref=2211010001165381;Src=ONLN;,Ref=2211010001165481;Src=ONLN;,Ref=2211010001165581;Src=ONLN;"';
SELECT OJ.Ref,
OJ.Src
FROM STRING_SPLIT(@YourParameter,',') SS
CROSS APPLY (VALUES(TRIM('"; ' FROM SS.[value])))V(Trimmed)
CROSS APPLY (VALUES(CONCAT('{"',REPLACE(REPLACE(V.Trimmed,'=','":"'),';', '","'),'"}')))J(JSON)
CROSS APPLY OPENJSON(J.JSON)
WITH(Ref varchar(20),
Src varchar(4)) OJ;
uj5u.com熱心網友回復:
另一種選擇是條件聚合(它可能更簡潔一些)。
例子
Declare @S varchar(max) ='Ref=2211010001165381;Src=ONLN;,Ref=2211010001165481;Src=ONLN;,Ref=2211010001165581;Src=ONLN;'
Select Ref = max(case when B.value like 'Ref=%' then substring(B.value,5,250) end)
,Src = max(case when B.value like 'Src=%' then substring(B.value,5,250) end)
From string_split(@S,',') A
Cross Apply string_split(A.value,';') B
Group By A.value
結果
Ref Src
2211010001165381 ONLN
2211010001165481 ONLN
2211010001165581 ONLN
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525470.html
下一篇:SSRS資料驅動查詢?
