我有两张桌子,TableA
和TableB
。
TableA
有=ItemA
"NVARCHAR(MAX)
1234,1235,1253,1643,2374"。TableB
有ItemB
作为INT(MAX)
。
我需要的是传递STRING
fromTableA
并将TableB
每个元素插入一个新行。
有没有更快的方法来做到这一点,而不是遍历STRING
逗号分隔?
我会将它作为数组或列表传递,但这是无法做到的。
使用 CTE,以下应该可以工作:
架构
CREATE TABLE tbl1 (
ItemA nvarchar(max))
INSERT INTO tbl1 VALUES ('1234,1235,1253,1643,2374')
询问
;WITH tmp(Item, ItemA) as (
SELECT LEFT(ItemA, CHARINDEX(',',ItemA+',')-1),
STUFF(ItemA, 1, CHARINDEX(',',ItemA+','), '')
FROM tbl1
UNION ALL
SELECT LEFT(ItemA, CHARINDEX(',',ItemA+',')-1),
STUFF(ItemA, 1, CHARINDEX(',',ItemA+','), '')
FROM tmp
WHERE ItemA > ''
)
INSERT INTO TableB (ItemB) SELECT Item FROM tmp