0

我正在使用SQL Server 2008 R2.

在基于角色的访问中从数据库中获取记录时遇到问题。

我有一张桌子让我们说TableA。我有 5 列,即ID (primary key), FirstName, LastName, RegistrationNumber, EmployeeIdent.

所有的列except ID都是Varchar类型。

我有一个存储过程来搜索记录。我将字符串传递给它并从所有五列中查找匹配的记录。

现在,我面临的问题是基于角色的访问。

要求是当用户为“ Admin”类型时,从所有五列中查找匹配记录,而当naive用户类型为“”时,则仅从 ID 列中搜索匹配记录。

我已将变量 @ 传递userType给存储过程,从中可以确定用户类型。

解决此问题的一种方法是 If Condition。就像if (@userType) = 'Admin'然后一些查询Else其他一些。但我不想在 If Condition 中编写查询。

解决此问题的另一种方法是将查询存储在varchar变量类型中,然后执行是 using EXEC (),但我听说它会在服务器上产生更多开销(我不确定)。

那么还有其他方法可以满足这个要求吗?

搜索记录的查询是

DECLARE @SearchText VARCHAR(MAX)= '' 

SELECT * 
FROM TableA 
WHERE 
Convert(varchar,ID) LIKE CASE WHEN LEN(@SearchText) = 0 THEN Convert(varchar,ID) ELSE '%'+ ISNULL(@SearchText,'0') + '%' END OR
FirstName LIKE CASE WHEN LEN(@SearchText) = 0 THEN FirstName ELSE '%'+ ISNULL(@SearchText,'') + '%' END OR
LastName LIKE CASE WHEN LEN(@SearchText) = 0 THEN LastName ELSE '%'+ ISNULL(@SearchText,'') + '%' END OR
RegistrationNumber LIKE CASE WHEN LEN(@SearchText) = 0 THEN RegistrationNumber ELSE '%'+ ISNULL(@SearchText,'') + '%' END OR
EmployeeIdent LIKE CASE WHEN LEN(@SearchText) = 0 THEN EmployeeIdent ELSE '%'+ ISNULL(@SearchText,'') + '%' END
4

1 回答 1

0
SELECT
*
FROM TABLEA
WHERE
(@userType = 'admin'
--add any other criteria for admin type here
) or (
@userType = 'naive'
--add any other criteria for naive type here
)
于 2013-07-12T06:32:54.553 回答