PATINDEX 列的所有值
PATINDEX all values of a column
我正在执行一个查询,该查询将删除表 1 中具有其列 table1.id = table2.id
的所有行
table1.id 列在 nvarchar(max) 中,xml 格式如下:
<customer><name>Paulo</name><gender>Male</gender><id>12345</id></customer>
编辑:
id 列只是巨大 XML 的一部分,因此结束标记可能与起始标记不匹配。
我试过使用 name.nodes 但它只适用于 xml 列并且更改列数据类型不是一个选择,到目前为止这是我使用 PATINDEX
DELETE t1
FROM table1 t1
WHERE PATINDEX('%12345%',id) != 0
但我需要的是搜索 table2.id 中包含如下内容的所有值:
12345
67890
10000
20000
30000
任何方法都会很好,例如 sp_executesql and/or while 循环,或者是否有比使用 patindex 更好的方法?谢谢!
;with cteBase as (
Select *,XMLData=cast(id as xml) From Table1
)
Select *
From cteBase
Where XMLData.value('(customer/id)[1]','int') in (12345,67890,10000,20000,30000)
如果您对结果满意,将最后的Select *
改为Delete
Select *
--Delete A
From Table1 A
Join Table2 B on CharIndex('id>'+SomeField+'<',ID)>0
我不知道表 2 中的字段名称。我还假设它是一个 varchar。如果没有,cast(SomeField as varchar(25))
EDIT - This is what I tested. It should work
Declare @Table1 table (id varchar(max))
Insert Into @Table1 values
('<customer><name>Paulo</name><gender>Male</gender><id>12345</id></customer>'),
('<customer><name>Jane</name><gender>Femail</gender><id>7895</id></customer>')
Declare @Table2 table (SomeField varchar(25))
Insert into @Table2 values
('12345'),
('67890'),
('10000'),
('20000'),
('30000')
Select *
--Delete A
From @Table1 A
Join @Table2 B on CharIndex('id>'+SomeField+'<',ID)>0
我正在执行一个查询,该查询将删除表 1 中具有其列 table1.id = table2.id
的所有行table1.id 列在 nvarchar(max) 中,xml 格式如下:
<customer><name>Paulo</name><gender>Male</gender><id>12345</id></customer>
编辑: id 列只是巨大 XML 的一部分,因此结束标记可能与起始标记不匹配。
我试过使用 name.nodes 但它只适用于 xml 列并且更改列数据类型不是一个选择,到目前为止这是我使用 PATINDEX
DELETE t1
FROM table1 t1
WHERE PATINDEX('%12345%',id) != 0
但我需要的是搜索 table2.id 中包含如下内容的所有值:
12345
67890
10000
20000
30000
任何方法都会很好,例如 sp_executesql and/or while 循环,或者是否有比使用 patindex 更好的方法?谢谢!
;with cteBase as (
Select *,XMLData=cast(id as xml) From Table1
)
Select *
From cteBase
Where XMLData.value('(customer/id)[1]','int') in (12345,67890,10000,20000,30000)
如果您对结果满意,将最后的Select *
改为Delete
Select *
--Delete A
From Table1 A
Join Table2 B on CharIndex('id>'+SomeField+'<',ID)>0
我不知道表 2 中的字段名称。我还假设它是一个 varchar。如果没有,cast(SomeField as varchar(25))
EDIT - This is what I tested. It should work
Declare @Table1 table (id varchar(max))
Insert Into @Table1 values
('<customer><name>Paulo</name><gender>Male</gender><id>12345</id></customer>'),
('<customer><name>Jane</name><gender>Femail</gender><id>7895</id></customer>')
Declare @Table2 table (SomeField varchar(25))
Insert into @Table2 values
('12345'),
('67890'),
('10000'),
('20000'),
('30000')
Select *
--Delete A
From @Table1 A
Join @Table2 B on CharIndex('id>'+SomeField+'<',ID)>0