SQL Server:将整数数组传递给存储过程

时间:2014-07-07 13:15:49

标签: sql .net sql-server stored-procedures

我已经阅读了几篇关于此的帖子。有些人的答案非常复杂,似乎解决方案必须更简单。所以这就是问题所在。

我有一个存储过程:

Select Distinct m.Name 
from Members as m
Where m.group in (x,y,z)

编写存储过程很简单,但x,y,z是动态的。 @Groups变量和x,y,z替换为@Groups。我可以使@Groups成为一个字符串并从调用代码传递,但我相信这将留给SQL注入。

我已经看过传递到桌子然后使用它的例子,但这似乎非常长,因为这么简单。有没有人为此获得安全的简单解决方案?这个简单的逻辑解决方案是什么?我想要做的是声明@Groups() int,如果这是有道理的。

增加: 所以有人建议我使用TVP。但是,我似乎无法让它们工作,也不确定它们是否是正确的解决方案。

Create type T_Group as Table
(
   id int
)

存储过程

Create Procedure sp_Getmembers
@Groups   T_Group READONLY
Select Distinct m.Name 
from Members as m
Where m.group in (SELECT id FROM @Groups)

但如果我运行sp_getmembers' 7,8,10,15,18'我收到错误'操作数类型冲突:varchar与T_Group'不兼容为什么呢?

0 个答案:

没有答案