我有两张桌子,TableA和TableB。
TableA有=ItemA"NVARCHAR(MAX)1234,1235,1253,1643,2374"。TableB有ItemB作为INT(MAX)。
我需要的是传递STRINGfromTableA并将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