1

我有两张桌子,TableATableB

  • TableA有= ItemA" NVARCHAR(MAX)1234,1235,1253,1643,2374"。
  • TableBItemB作为INT(MAX)

我需要的是传递STRINGfromTableA并将TableB每个元素插入一个新行。

有没有更快的方法来做到这一点,而不是遍历STRING逗号分隔?

我会将它作为数组或列表传递,但这是无法做到的。

4

1 回答 1

0

使用 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

小提琴

于 2012-09-07T01:02:33.157 回答