我有一个表,其中包含一个将逗号分隔的值存储为字符串的字段。我想从另一个表的多行中的一行中向该字符串添加更多值。下面你会看到一个例子。
我认为 COALESCE() 会起作用,并且我知道如何使用该技巧来加载变量,但我认为这意味着我必须使用游标来收集我想要的所有值t1 的每一行,我真的很想避免游标。这个表格设计是我继承的一团糟,我宁愿通过到处使用游标来处理它来避免让它变得更糟。
CREATE Table t1(
StringColumn VARCHAR(10)
)
CREATE Table T2(
TestString VARCHAR(10),
ConcatString VARCHAR(10)
)
INSERT INTO t1(StringColumn) VALUES('1,2,3')
INSERT INTO T2(TestString,ConcatString) VALUES('2','4')
INSERT INTO T2(TestString,ConcatString) VALUES('2','5')
INSERT INTO T2(TestString,ConcatString) VALUES('2','6')
INSERT INTO t1(StringColumn) VALUES('A,B,C')
INSERT INTO T2(TestString,ConcatString) VALUES('A','D')
INSERT INTO T2(TestString,ConcatString) VALUES('B','E')
INSERT INTO T2(TestString,ConcatString) VALUES('B','F')
Begin Tran --Commit Rollback
UPDATE t1
Set t1.StringColumn = t1.StringColumn + ',' + t2.ConcatString
FROM t1
INNER JOIN t2 ON charindex(t2.TestString,t1.StringColumn) <> 0
SELECT * FROM t1
根据这个例子,结果是:
1,2,3,4
A B C D
我希望 t1 的两行看起来像:
1,2,3,4,5,6
A,B,C,D,E,F
谢谢。任何意见,将不胜感激。