使用T-sql进行ID匹配时,通常做法是将ID拼接为以逗号分割的字符串,然后使用
SELECT ID FROM TABLE WHERE ID IN ( ...,...)等。
上述做法有两个方面需要考虑.
1.IN 中能容纳的最大元素个数。(经验证最大为1000)
2.效率问题。
有以下三种思路,分别按照效率由高到低进行IN的替换使用。
1. 将需要匹配的信息(例如ID)插入临时表,遍历临时表取出ID,用=来逐个匹配。
2. 用Inner join来关联上述建立的临时表,连接字段为要匹配的元素(例如ID).
3.用EXISTS语句。
PS:
如果是将ID等信息拼接在XML中,如下:
@inputXml =
<root>
<record pk_id = ‘1’/>
<record pk_id = ‘2’/>
</root>
提供一种解析XML的匹配方式。
用更新一张表的指定ID的数据为例:
update A
SET M
FROM Table A
INNER JOIN(
SELECT
T.c.value('(@pk_id)[1]','DECIMAL(10,0)')AS ID
FROM @inputXml.nodes('/root/record')AS T(c)
)B
ON A.ID = B.ID