Java 将非常大的字符串数组传递给SQL存储过程
我有一个存储过程,它接受一个ProductID的字符串数组,每13个字符长,例如:2345697894131,现在从我的后端代码中,我可以通过将数组转换为CSV字符串将其作为CSV传递。 因此,在存储过程中,我可以将其捕获为:Java 将非常大的字符串数组传递给SQL存储过程,java,sql,sql-server,node.js,Java,Sql,Sql Server,Node.js,我有一个存储过程,它接受一个ProductID的字符串数组,每13个字符长,例如:2345697894131,现在从我的后端代码中,我可以通过将数组转换为CSV字符串将其作为CSV传递。 因此,在存储过程中,我可以将其捕获为: @in_product_id VARCHAR(MAX) or maybe VARCHAR(8000) 然后我使用split函数和IN来检查各种情况 例如: select查询的语法可能不正确 但是,这是接收ID数组的理想方式吗。我担心的是,当productid数组太大并且
@in_product_id VARCHAR(MAX) or maybe VARCHAR(8000)
然后我使用split函数和IN来检查各种情况
例如:
select查询的语法可能不正确
但是,这是接收ID数组的理想方式吗。我担心的是,当productid数组太大并且超过MAX时,我将不得不跟踪这些丢失的id
我需要知道在存储过程中处理此类输入的理想方法,还是应该限制要获取的productid的数量 阅读有关为您的客户提供表值参数支持的内容。@Richard提到的TVP是性能最好的方法。另一种可能的解决方案是使用XML,但如果您可以使用TVP,那么就不要考虑其他选项是的,这对于我的用例来说已经足够好了,谢谢@Richard,基于Dmitrij XML的解决方案可能会增加更多的复杂性,因此,我将按照您关于使用TVP的建议:)仔细阅读您的客户对表值参数的支持。@Richard提到的TVP是性能最好的方法。另一种可能的解决方案是使用XML,但如果您可以使用TVP,那么就不要考虑其他选项是的,这对于我的用例来说已经足够好了,谢谢@Richard,基于Dmitrij XML的解决方案可能会增加更多的复杂性,所以我将按照您的建议使用TVP:)
IF EXISTS (SELECT top 1 * FROM Table WHERE (productid IN (SELECT (value) from dbo.split(@in_product_id,','))))