SQL Server:如何传递可变长度的输入变量?长度可能达到任何限制?

时间:2016-10-21 09:09:20

标签: sql-server

我有逗号分隔的数字,我们需要将它作为输入传递给存储过程。

输入参数如下:

@CustStockLogIdList varchar(1000)

我正在向此参数发送输入,例如1,2,3,4,5,6,7,8,依此类推。列表可以是任何长度。

我知道在这种情况下,如果它超过1000个字符,它会将传递的值减少到1000个字符并进行其余的处理。

但我不确定长度。

当我读取varchar的限制为8000时,@CustStockLogIdList varchar(MAX)@CustStockLogIdList varchar(8000)也允许长度为8000个字符,但我想要更多。我不确定我需要的最大长度。

1 个答案:

答案 0 :(得分:2)

您可以使用VARCHAR(MAX)来发送 2GB 数据。

但我建议你使用Table值参数作为过程输入参数而不是逗号分隔列表作为输入

Create type udt_CustStockLogIdList as table
(
id int
)

您需要更改过程以接受此udt_CustStockLogIdList作为参数。

Alter procedure prc_proc_name(@CustStockLogIdList_TT udt_CustStockLogIdList READONLY)
As 
Begin
..
End

调用程序

Declare @CustStockLogIdList_TT udt_CustStockLogIdList

Insert into @CustStockLogIdList_TT
values (1),(2),(3),..

Exec prc_proc_name CustStockLogIdList_TT