如何将长度为50k的逗号分隔字符串分配给存储过程中的任何变量?

问题描述 投票:0回答:1

我想将逗号分隔值转换为存储过程中的行,以便长度为50k的字符串?

我将此逗号分隔的字符串传递给c#application中的过程

create procedure sp_1
(
    @Arraylist Nvarchar(max) 
)
as
begin 
Declare @areaIdarray_list nvarchar(max)
 Set @areaIdarray_list = @Arraylist

select rm.AreaId 
from table1 rm
where rm.AreaId in(
    select cast(value as int) 
    from dbo.fn_Split(@areaIdarray_list,',')
)
end

它也工作,但只能达到8k字符串的长度。 我想为长度为50k的字符串做这个。 即exec sp_1('1,2,3,..........')等,直到50k。

tsql
1个回答
0
投票

我将此逗号分隔的字符串传递给c#application中的过程

由于您没有使用古老版本的SQL Server(考虑到2008年添加了nvarchar(max)),最好的方法是不要使用逗号分隔的字符串。 而是将表值参数从c#传递给存储过程。

创建用户定义的表类型:

create type dbo.ids as table
(
    id int not null primary key
)

那么你需要的就是你的程序:

create procedure stpGetAreas
(
    @tvp dbo.ids readonly
)
as
select rm.AreaId 
from table1 rm
join @tvp tvp 
    on rm.AreaId = tvp.id

c#支持连接数据库的不同方式,但是你没有指定你正在使用哪一种方法,而且我不知道你的c#代码应该如何看,而不知道你是如何连接数据库的。

© www.soinside.com 2019 - 2024. All rights reserved.