我遇到了情况。我创建了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进行任何更改。请帮忙。
提前致谢
答案 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