如何将多个值传递给从VBA运行的存储过程参数?

时间:2015-04-08 21:30:49

标签: excel vba excel-vba

我遇到了情况。我创建了VBA,用2个参数调用SP。如何将2个值传递给每个参数?

以下代码为例,将单个值传递给每个参数:

cmd.Parameters.Append cmd.CreateParameter("@Class", adVarChar, adParamInput, 40)
cmd.Parameters("@Class").Value = "H"


cmd.Parameters.Append cmd.CreateParameter("@Color", adVarChar, adParamInput, 40)
cmd.Parameters("@Color").Value = "Black"

现在我想传递“M”,“黄色”。我怎样才能做到这一点? 我是否还需要对SP进行任何更改。请帮忙。

提前致谢

1 个答案:

答案 0 :(得分:2)

问题是存储过程只需要传递一个值,而不是一系列值。如果SQL允许IN子句传递一个像这样的值数组,那么你就是在做生意:

select * from mytable where id in @parameters

但不幸的是,它并没有让所有人工作。你可以消除存储过程,只是拼凑一个SQL字符串,这是一个SQL注入风险,但如果你的代码只是在内部使用,那么这不会让人感到担忧。正如评论中所提到的,如果您希望按原样使用SP,那么您可能只需要多次运行查询并将结果附加到本地列表/数组/记录集/每次运行它时。还有其他一些想法,但它们基本相同,因为您将自定义SQL字符串拼凑在一起,这更复杂,并且不像他们设计的那样真正使用SP参数。

How to pass string parameter with `IN` operator in stored procedure SQL Server 2008

SQL IN Clause In Stored Procedure