使用'IN'子句执行存储过程

时间:2015-06-10 16:48:44

标签: sql stored-procedures

我有以下(非常简化的)存储过程:

CREATE PROCEDURE [dbo].[sp_Search]
    @MatchGender varchar(6)

AS
BEGIN

SELECT 
    * 
FROM [tblUsers]
WHERE [UserGender] in (@MatchGender)

END

GO

我希望能够匹配男性,女性或两者,所以我使用的是“IN”条款。

当我测试我的存储过程时,我运行以下命令:

exec [sp_Search] 'F'

工作正常。现在,我将如何为两性打算运行?当我尝试:

exec [sp_Search] ('F', 'M')

它不起作用。什么是正确的语法?请注意,其中一些匹配有几十个选项,因此假设用户可以从可能的20中选择6或7.并非所有变量都像M / F一样简单。

1 个答案:

答案 0 :(得分:0)

从整体设计的角度来看,我不会假装这是一个理想的答案,但这是解释你所尝试的方法的一种方法:

CREATE PROCEDURE [dbo].[sp_Search]
    @MatchGender nvarchar(max)

AS
BEGIN
Declare @statement nvarchar(max)

Set @Statement = "select * from [tblUsers] where UserGender in (" + @MatchGender +")"

exec @statement

end

现在,一些明显的警告是你必须确保参数字符串格式正确,例如“'M','F'”,这样当EXEC执行时它将形成一个正确的列表。

同样,这可能不是整体设计的理想概念,(许多安全问题,SQL注入风险等),但这应该说明一种方法来完成你正在尝试的。未经测试:)