2016-10-21 54 views
0

我有逗號分隔的數字,我們需要作爲輸入傳遞給存儲過程。SQL Server:如何傳遞可變長度的輸入變量?長度可能會達到任何限制?

輸入參數是這樣的:

@CustStockLogIdList varchar(1000) 

我喜歡1,2,3,4,5,6,7,8等發送輸入到這個參數。該列表可以是任何長度。

我知道在這種情況下,如果它超過了1000個字符,它會將傳遞的值減少到1000個字符,並執行其餘的處理。

但我不確定長度。

因爲我讀varchar的限制是8000,@CustStockLogIdList varchar(MAX)@CustStockLogIdList varchar(8000)也可以允許長度爲8000個字符,但我想要更多。我不確定我需要的最大長度。

回答

2

您可以使用VARCHAR(MAX),它允許發送最多2GB的數據。

但我會建議你使用表值參數作爲過程的輸入參數,而不是逗號分隔的列表作爲輸入

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