我有一个类似于以下内容的SQL查询:
create procedure test
(
@param1 nvarchar(max)
)
as
begin
select * from table where column1 in (@param1)
end
现在我需要从我的.net应用程序中传递@param1
的值,以便上述查询能够正常工作。
有人可以告诉我如何从我的VB.NET代码传递一个类似下面的值:
'1','2','3'
我的主要问题是如何从我的.NET应用程序中构建上述参数的参数值?
答案 0 :(得分:4)
很快就会这样,我会创建一个table valued function来解析它,以便你可以做到
select *
from table
where field in (select field from dbo.myfunction(@param1))
答案 1 :(得分:3)
对于这种类型的东西,我使用这个函数并按如下方式使用它:
从我的表中选择Column1,column2,其中ID为(从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
答案 2 :(得分:1)
我认为问题不在于你传递的价值观。 @ param1只是一个字符串。
您需要在程序中解决此问题。您的select语句将无法识别您IN子句中的值。一种解决方案是采用逗号分隔的字符串并将每个记录插入表变量Explained Here
如果您的表变量是表@param_list,则过程测试如下所示:
create procedure test ( @param1 nvarchar(max) )
as begin
select * from table where column1 in (Select thefield from @param_list);
end