我有以下(非常简化的)存储过程:
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一样简单。
答案 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注入风险等),但这应该说明一种方法来完成你正在尝试的。未经测试:)