gpt4 book ai didi

java - JDBC 中大型 IN 子句的替代方案,如何使用 Java 中的表值参数?

转载 作者:行者123 更新时间:2023-11-30 09:21:47 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2008 RC2。

我们经常要做类似这样的查询:

select * from Site s where s.name in (:names)

其中 ":names" 是一个很大的 StringBuilder,包含 1000 个以逗号分隔的 18 字节名称。这需要一段时间才能运行;在我的本地开发机器上最多一分钟。我知道很多人为此建议使用 Table Valued Parameters (TVP),例如下面的示例:

create procedure [dbo].[sp_TestSites] @siteNames SiteNameTableType readonly
as
begin
select s.* from Site s
inner join @siteNames d on d.name = s.name
end

但由于 Microsoft JDBC 驱动程序仍然不支持 TVP(据我所知),实现这一点的最佳方法是什么?将一长串逗号分隔值发送到存储过程,然后拆分过程中的字符串并插入到临时表中?示例:

create type dbo.SiteNameTableType as table(
name varchar(18) not null unique
)

create procedure sp_TestSites(
@longStringOfNames varchar(max))
as
begin
declare @siteNames SiteNameTableType

insert into @siteNames
select * from dbo.split(@longStringOfNames) -- assume I have a Split function

select s.* from Site s
inner join @siteNames d on d.name = s.name
end

最佳答案

正如我在评论中提到的,您可以将数据准备为 XML 字符串并将其传递给存储过程。在 SP 中,您可以查询该 XML 并根据需要加入结果集。

关于java - JDBC 中大型 IN 子句的替代方案,如何使用 Java 中的表值参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16783047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com