2010-11-18 31 views
4

我具有類似於下面的SQL查詢的值從.NET傳遞逗號分隔值到存儲過程:使用「IN」 SQL函數

create procedure test 
(
    @param1 nvarchar(max) 
) 
as 
begin 
    select * from table where column1 in (@param1) 
end 

現在我需要從傳遞的@param1值我的.net應用程序以上述查詢的方式工作。

可以有一個人請告訴我如何從我的VB.NET代碼傳遞值類同如下:

'1','2','3'

我的主要問題是如何做到像上面的參數我結構值我的.NET應用程序的例子?

+1

哪個SQL Server版本? – 2010-11-18 13:53:32

+0

sql server 2005 – Amit 2010-11-18 13:54:15

+0

檢查這個職位http://blog.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx – Nalaka526 2012-02-20 10:56:02

回答

4

迅速那樣,我將創建一個table valued function將解析它,所以你可以做

select * 
    from table 
    where field in (select field from dbo.myfunction(@param1)) 
+0

你是救命的伴侶。非常感謝 – Amit 2010-11-18 14:03:11

1

我不認爲這個問題是在你傳遞的值。 @ param1只是一個字符串。

你需要在你的程序中解決這個問題。您的select語句將無法識別您IN子句中的值。一種解決方案是採取逗號分隔的字符串,並插入每個記錄到一個表變量解釋Here

如果您的表變量表@param_list,你的程序的測試看起來像:

create procedure test (@param1 nvarchar(max)) 
as begin 
select * from table where column1 in (Select thefield from @param_list); 
end 
2

對於這種類型的我使用這個函數,並使用它如下:

從我的表中選擇Column1,column2其中ID in(從fnSplit('1,2,3,4,5,6',','中選擇項目) )

create FUNCTION [dbo].[fnSplit](
     @sInputList VARCHAR(8000) -- List of delimited items 
     , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items 
    ) 

RETURNS @List TABLE (item VARCHAR(8000)) 

BEGIN 
DECLARE @sItem VARCHAR(8000) 
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0 
BEGIN 
SELECT 
    @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))), 
    @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList)))) 

IF LEN(@sItem) > 0 
    INSERT INTO @List SELECT @sItem 
END 

IF LEN(@sInputList) > 0 
INSERT INTO @List SELECT @sInputList -- Put the last item in 
RETURN 
END