【发布时间】:2019-03-27 20:02:51
【问题描述】:
我需要在我的阶段表中使用STRING_SPLIT 并将结果导入另一个表。
舞台表:
DECLARE @stage TABLE(ID INT, Code VARCHAR(500))
INSERT INTO @stage
SELECT 1, '123_Potato_Orange_Fish'
UNION ALL
SELECT 2, '456_Tomato_Banana_Chicken'
UNION ALL
SELECT 3, '789_Onion_Mango_Lamb'
决赛桌:
DECLARE @Final TABLE
(
ID INT,
code VARCHAR(500),
Unit VARCHAR(100),
Vegetable VARCHAR(100),
Fruit VARCHAR(100),
Meat VARCHAR(100)
)
我正在使用 SSIS 执行任务来转换阶段表数据并插入到最终表中。 stage 表中的 Code 列是字符串,'_' 用于分隔符。我需要分隔字符串并显示最终表格如下所示
ID code Unit Vegetable Fruit Meat
------------------------------------------------------------------
1 123_Potato_Orange_Fish 123 Potato Orange Fish
2 456_Tomato_Banana_Chicken 456 Tomato Banana Chicken
3 789_Onion_Mango_Lamb 789 Onion Mango Lamb
我正在尝试使用 SQL Server 2016 内置的String_Split() 函数,如下所示:
SELECT
ID,
Code, f.value AS Vegetable
FROM
@stage AS s
CROSS APPLY
(SELECT
value,
ROW_NUMBER() OVER(PARTITION BY s.ID ORDER BY s.ID) AS rn
FROM
String_Split(s.Code, '_')) AS f
WHERE
s.ID = 1 AND f.rn = 2
但它一次只拆分一个字符串,因为我的阶段数据包含数百万条记录,我需要拆分代码列中的所有字符串并存储在相应的列中。
注意:我不想使用临时表。
谢谢
【问题讨论】:
-
STRING_SPLIT()- 为什么会 - 不保证按给定顺序返回片段。但是有OPENJSON,看我的回答...
标签: tsql ssis split delimiter sql-server-2016