【发布时间】:2011-07-10 06:59:20
【问题描述】:
我创建了一个存储过程,它在 tbluser 表中运行 5000 个用户,并在数据库中有一些过滤条件。有 4 个过滤条件(FC1、FC2、FC3、FC4)。过滤条件有一些 ListBox 和部门下拉列表和国家。我想要如下所示的输出:
ID Name StaffNo department Points
1 KK 111 dep1 2
2 NN 222 dep2 1
3 DD 333 dep3 4
我在结果集中有 ID、姓名、员工编号、部门,但没有积分。
积分计算将基于过滤条件,如
如果FC1匹配用户得1分,如果FC1和FC2都匹配用户得2分,如果FC1、FC2和FC3都匹配用户得3分等等。
--in stored procedure i m using dynamic query
DECLARE @SQL VARCHAR(2000)
SET @SQL = 'SELECT U.UserID, U.StaffNo,U.FirstName+'' ''+ U.LastName AS EmployeeName,''?'' AS Points FROM tblUser U '
SET @SQL = @SQL+' WHERE U.Department in (' + @SqlDepartment + ') '
---------------------Update---------------------------------------
IF @SqlLanguage <> ''
SET @SQL = @SQL+' OR U.UserID IN (SELECT UserID FROM Country WHERE LCValues IN ('+ @SqlLanguage +') )'
IF @SqlAreas <> ''
SET @SQL = @SQL+' OR U.UserID IN (SELECT UserID FROM tblAreas WHERE '+@SqlAreas+')'
---------------------Update---------------------------------------
...other filtering condition
EXEC (@SQL)
所有过滤条件都是用OR逻辑实现的。
【问题讨论】:
标签: asp.net sql-server-2005 stored-procedures dynamic-sql