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)