样本数据
CREATE TABLE Testdata
(
SomeID INT,
OtherID INT,
String VARCHAR(MAX)
)
INSERT Testdata SELECT 1, 9, '18,20,22'
INSERT Testdata SELECT 2, 8, '17,19'
INSERT Testdata SELECT 3, 7, '13,19,20'
INSERT Testdata SELECT 4, 6, ''
INSERT Testdata SELECT 9, 11, '1,2,3,4'
我用以下查询成功去掉了逗号。
Select A.SomeID
,B.*
From [filter].[dbo].[Testdata] A
Cross Apply (
Select RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select
replace(A.String,',','§§Split§§')
as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.'))
as A
Cross Apply x.nodes('x') AS B(i)
) B
现在,我想知道如何使用新的数值更新已有的表格。 谢谢。
OtherID
应该怎么处理——在新行中重复吗?由于旧表和新表之间没有一对一的映射关系,所以更容易的方法是从查询中创建一个新表,删除旧表并将其重命名(或者如果无法物理删除表,则删除/截断/插入)。唯一不适用的情况是如果您有指向Testdata
的外键,但那样您的问题就变得更加复杂了。 - Jeroen MostertCREATE TABLE
创建表,然后使用INSERT NewTable(SomeID, NewString) SELECT <your whole query>
插入数据。更简单的方式是使用SELECT [columns] INTO NewTable FROM ...
,但这将创建一个没有索引或主键的表,因此您需要在之后添加这些内容。 - Jeroen Mostert