我正在使用 SQL Server 2008 RC2。
我们经常不得不做一个类似这样的查询:
select * from Site s where s.name in (:names)
":names"
1000 个逗号StringBuilder
分隔的 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 Driver 仍然不支持 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