2010-11-18 3 views
4

J'ai une requête SQL similaire à ce qui suit:passage valeurs séparées par des virgules de .NET à la procédure stockée en utilisant la valeur « IN » fonction SQL

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

Maintenant je dois passer la valeur de @param1 de mon application .net de telle manière que la requête ci-dessus fonctionne.

Quelqu'un peut s'il vous plaît me conseiller sur la façon de passer de mon code VB.NET une valeur qui est similaire à ci-dessous:

'1','2','3'

Ma principale question est comment puis-je la valeur de la structure des paramètres comme ci-dessus exemple de mon application .NET?

+1

Quelle version de SQL Server? –

+0

sql server 2005 – Amit

+0

Consultez cet article http://blog.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx – Nalaka526

Répondre

4

rapidement comme ça, je créerais un table valued function qui l'analyser afin que vous puissiez faire

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

vous êtes un compagnon d'épargnant de la vie. Merci beaucoup – Amit

1

Je ne pense pas que le problème est dans les valeurs que vous transmettez. @ param1 est juste une chaîne.

Vous devez résoudre ce problème dans votre procédure. Votre instruction select ne pourra pas reconnaître les valeurs dans votre clause IN. Une solution consiste à prendre la chaîne séparée par des virgules et insérez chaque enregistrement dans une variable de table Expliqué Here

Si votre variable de table est la table @param_list, vous test de procédure ressemble à:

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

Pour ce type de chose, j'utilise cette fonction et l'utilise comme suit:

sélectionnez Colonne1, colonne2 de ma table où ID dans (sélectionnez l'élément de 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 
Questions connexes