0
我有表名为EMPLOYEE包含名,姓和员工ID。现在,当我搜索时,我想获取行单独名称或姓氏单独或可能是两个。怎么做?检索满足任何一个条件或行两个条件
我有表名为EMPLOYEE包含名,姓和员工ID。现在,当我搜索时,我想获取行单独名称或姓氏单独或可能是两个。怎么做?检索满足任何一个条件或行两个条件
我会使用动态查询:
DECLARE @FirstName NVARCHAR(50), @LastName NVARCHAR(50);
SET @FirstName = 'John';
SET @LastName = 'Johnson';
DECLARE @SqlStatement NVARCHAR(MAX), @SqlParamters NVARCHAR(MAX);
SET @SqlStatement = N'SELECT e.EmployeeID, e.FirstName, e.LastName FROM dbo.Employee e
'
+ CASE WHEN @FirstName IS NOT NULL OR @LastName IS NOT NULL THEN 'WHERE '
+ CASE WHEN @FirstName IS NOT NULL THEN 'e.FirstName = @pFirstName'
+ CASE WHEN @LastName IS NOT NULL THEN 'e.LastName = @pLastName';
-- PRINT @SqlStatement;
EXEC sp_executesql
@SqlStatement,
N'@pFirstName NVARCHAR(50), @pLastName NVARCHAR(50)',
@pFirstName = @FirstName,
@pLastName = @LastName;
索引:如果您有以下指标
CREATE INDEX IX_Employee_LastName_FirstName
On dbo.Employee (LastName, FirstName);
则只有以下谓词是可优化搜索(索引查找):
WHERE e.LastName = @pLastName
和
WHERE e.LastName = @pLastName AND e.FirstName = @pFirstName
,但下面的谓词不是可优化搜索(索引扫描):
WHERE e.FirstName = @pFirstName
您可以使用以下查询。我假设你有2个参数@FirstName
和@LastName
,如果你不想按它们搜索,它可以是NULL。
SELECT * FROM EMPLOYEE
WHERE ([First Name] = @FirstName OR @FirstName IS NULL)
AND ([Last Name] = @LastName OR @LastName IS NULL)