我已经阅读了几篇关于此的帖子。有些人的答案非常复杂,似乎解决方案必须更简单。所以这就是问题所在。
我有一个存储过程:
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'不兼容为什么呢?