我有一個帶有 2 個字串型別輸入引數(varchar(max))的存盤程序。
@draw = '172, 182, 167'
@game = '100, 101, 100'
我想決議它們并將它們存盤在如下表中:
|----------------------------------|
| draw | game |
|----------------------------------|
| 172 | 100 |
| 182 | 101 |
| 167 | 100 |
|----------------------------------|
我怎樣才能做到這一點?任何建議表示贊賞,謝謝。
這是我到目前為止所嘗試的:我能夠將字串分成兩行,但我無法弄清楚的部分是如何決議 2 個不同的輸入并在它們被傳遞時以同步的方式將它們放入我的表中進入程式。
這是我嘗試決議它們:
create table report_game_draw (
draw_id varchar(max) NULL,
game_id varchar(max) NULL
)
go
Declare @draw nvarchar(MAX)
Declare @game nvarchar(MAX)
Set @draw ='188,189,190,191,192,193,194'
Set @game ='188,189,190,191,192,193,194'
DECLARE @XML AS XML
DECLARE @XML1 AS XML
DECLARE @Delimiter AS CHAR(1) =','
SET @XML = CAST(('<X>' REPLACE(@draw,@Delimiter ,'</X><X>') '</X>') AS XML)
SET @XML1 = CAST(('<X>' REPLACE(@game,@Delimiter ,'</X><X>') '</X>') AS XML)
INSERT INTO report_game_draw (draw_id,game_id)
((SELECT N.value('.', 'INT') AS ID FROM @XML.nodes('X') AS T(N),
(SELECT N.value('.', 'INT') AS ID FROM @XML1.nodes('X') AS T(N))
uj5u.com熱心網友回復:
有很多方法可以解決這個問題 - 請注意,盡管 SQL Server 提供了string_split函式,但它僅對Azure中支持序列號以保證排序的特定用例才是可靠的。
我傾向于將 Json 功能用于此類流程,如下所示:
declare
@draw varchar(max) = '172, 182, 167',
@game varchar(max) = '100, 101, 100';
select Draw, Game
from (
select Convert(int, j.[value]) as Draw, 1 Convert(tinyint,j.[key]) Seq
from OpenJson(Concat('["',replace(@draw,',', '","'),'"]')) j
) d join (
select Convert(int, j.[value]) as Game, 1 Convert(tinyint,j.[key]) Seq
from OpenJson(Concat('["',replace(@game,',', '","'),'"]')) j
) g on d.Seq = g.Seq
示例小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461148.html
