从您的代码中,我假设这是 SQL-Server,但您添加了标签[mysql]
……
对于您的下一个问题,请记住,了解您的工具(供应商和版本)非常重要。
假设T-SQL
并且[sql-server]
(根据提供的示例代码)您很接近:
DECLARE @InputXml XML=
N'<Keys>
<key>246</key>
<key>247</key>
<key>248</key>
</Keys>';
DECLARE @YourTransactionTable TABLE(ID INT IDENTITY,financial_transaction_grp_key INT);
INSERT INTO @YourTransactionTable VALUES (200),(246),(247),(300);
Select t.*
From @YourTransactionTable as t
Inner Join @InputXml.nodes('/Keys/key') as K(X)
on K.X.value('text()[1]', 'INT') = t.financial_transaction_grp_key;
什么问题:
.nodes()
必须向下到重复元素,即<key>
- 在
.value()
您使用 path@Key
时,这在两个方面都是错误的:1)<key>
是元素而不是属性,2)XML 严格区分大小写,所以Key!=key
.
另一种可能是这样的:
WHERE @InputXml.exist('/Keys/key[. cast as xs:int? = sql:column("financial_transaction_grp_key")]')=1;
哪个更快取决于源表中的行数以及 XML 中的键数。试试看。