1

我的 SQL Server 2008 数据库中有下表

dbo.FormEmployment
------------------
employmentID int (PK)
formID int (FK)
gradeID int
employerName nvarchar

我希望创建一个查询,该查询将根据他们的gradeID 选择所有用户。目前我有以下查询

DECLARE @gradeID int
SET @gradeID = 1

SELECT distinct u.userID, u.userTypeID, u.firstName, u.lastName, u.email, u.password, u.contactNumber, u.organisationID, u.emailVerificationCode, u.mobileVerificationCode, u.userStatusID 

FROM [User] u, dbo.FormEmployment emp, dbo.Form f

WHERE u.userTypeID = 47 
--Grades
AND emp.gradeID = @gradeID
AND f.formID = emp.formID
AND f.locumID = u.userID

上面的查询允许我声明一个gradeID,然后获取与该gradeID 匹配的所有用户。但是,我还需要能够声明几个gradeID,例如,我希望我的参数@gradeID 是这样的

设置@gradeID = 1、2、3

这样它将获得所有具有 1、2 或 3 级的用户。

反正有这样做吗?任何帮助或指导将不胜感激,因为我必须为应用程序构建的搜索依赖于它。

谢谢。

编辑

有关搜索如何工作的更多信息。

每个 GradeID 都将存储在数据库中的一个表中。用户将看到gradeID 的复选框列表,然后他们将能够从该列表中选择任意数量的gradeID。一旦他们单击“提交”,他们选择的等级 ID 将被传递到我的存储过程以执行搜索。

4

2 回答 2

3
DECLARE @grades
        TABLE
        (
        id INT
        )

INSERT
INTO    @grades
VALUES
        (1),
        (2),
        (3)

SELECT   u.userID, u.userTypeID, u.firstName, u.lastName, u.email, u.password, u.contactNumber, u.organisationID, u.emailVerificationCode, u.mobileVerificationCode, u.userStatusID 
FROM     [User] u
WHERE    userId IN
         (
         SELECT  f.locumId
         FROM    FormEmployment emp
         JOIN    Form f
         ON      f.formId = emp.formId
         WHERE   emp.gradeId IN
                 (
                 SELECT  id
                 FROM    @grades
                 )
         )
         AND u.userTypeID = 47 
于 2012-05-30T09:54:25.780 回答
0

一种可能:

SELECT (...) 
FROM (...) 
WHERE emp.gradeID IN (@gradeID1, @gradeID2, @gradeID3)

如果不知道参数个数,可以在运行时生成sql IN子句(同时给SqlCommand实例添加参数)

于 2012-05-30T09:50:23.400 回答